home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 27 / Mac Magazin and MacEasy Magazine CD - Issue 27.iso / Grafik & Text / SGMLTool Folder / SgmlForm.pl < prev    next >
Text File  |  1996-10-21  |  75KB  |  2,424 lines

  1. #---------------------------------- NOTICE --------------------------------------
  2. #
  3. # SgmlForm is the script of MacJPerl.
  4. # Rewrite the &MacPerl'function()s if you want to run SgmlForm on another machine.
  5. # SgmlForm runs without any argument.
  6. #
  7. #------------------------------ About SgmlForm -----------------------------------
  8. #
  9. # SgmlForm is FREE software.
  10. # I grant to any user an royalty-free, worldwide, non-exclusive license to use, execute, reproduce, display, perform and distribute copies of SgmlForm.
  11. # SgmlForm processes the ESIS-formatted data that is generated by SGML-parser `MacSgmls'.
  12. # SgmlForm reads the source-file(ESIS-formatted), and generates the target-file(text-file for TeX or PageMaker) while referring to the map-info-file.
  13. # SgmlForm is operated by special commands.
  14. # SgmlsForm was developed by KISI,KAZUTAKA.
  15. # Write me when you detected any error.
  16. # Also write me when you adapted to new version.
  17. # The English writing is my weak point.
  18. # If you will correct this document, I am very glad.
  19. #  e-mail : NAG00251@niftyserve.or.jp
  20. # (c) Sep.30 1996 KISI
  21. #
  22. #----------------------------------------------------------------------------------
  23. #
  24. #  SgmlForm
  25. #  (c) 1996 KISI
  26. #
  27. $ver = '1.4' ;
  28. $language = 'E' ;
  29. #
  30. # Initialize
  31. $lines = 30 ; $columns = 70 ;
  32. $esi = 'esi' ; $map = 'MPM' ; $tgt = 'pm' ; $creator = 'ttxt' ;
  33. $eerr = '' ; $jerr = '' ;
  34. while ($doc = <DATA>) {
  35.   if (substr($doc, 0, 2) eq '!!') { last ; }
  36.   if (substr($doc, 0, 1) eq '?') { $lang = substr($doc, 1, 1) ; next ; }
  37.   if ($lang eq 'E') { $eerr .= $doc ; } else { $jerr .= $doc ; }
  38. }
  39. unless (open(CNF, "<SgmlForm.cfg")) {
  40.   if ($language eq 'E') {
  41.     print("\n Can not open `SgmlForm.cfg' !") ;
  42.     print("$eerr") ;
  43.     &command("O K") ;
  44.   }
  45.   else {
  46.     print("\n ä¬ã´ïœêîÉtÉ@ÉCÉãÅgSgmlForm.cfgÅhÇ™äJÇ´Ç‹ÇπÇÒÅI") ;
  47.     print("$jerr") ;
  48.     &command("ÇÕÇ¢") ;
  49.   }
  50.   exit(0) ;
  51. }
  52. #
  53. # Set the Environment Variables
  54. while ($cfg = <CNF>) {
  55.   chop($cfg) ;
  56.   if ($cfg =~ m!^LANGUAGE\=(.*)!) {$language = $1 ; next ; }
  57.   if ($cfg =~ m!^PATH\=(.*)!) {$lib = $1 ; @INC = ($lib) ; require('GUSI.ph') ; next ; }
  58.   if ($cfg =~ m!^LINES\=(.*)!) {$lines = 0+$1 ; next ; }
  59.   if ($cfg =~ m!^COLUMNS\=(.*)!) {$columns = 0+$1 ; next ; }
  60.   if ($cfg =~ m!^ESIS\=(.*)!) {$esi = $1 ; next ; }
  61.   if ($cfg =~ m!^MAP\=(.*)!) {$map = $1 ; next ; }
  62.   if ($cfg =~ m!^TARGET\=(.*)!) {$tgt = $1 ; next ; }
  63.   if ($cfg =~ m!^CREATOR\=(.*)!) {$creator = $1 ; next ; }
  64.   print("  Unknown parameter ! $cfg\n") ;
  65. }
  66. close(CNF) ;
  67. #
  68. # Interprete the Command
  69. &openning() ;
  70. while (1) {
  71.   $com = &command("$filename\{$dtd\}[$esi][$map][$tgt($creator)]") ;
  72.   $mapfile = $path.':'.$dtd.'.'.$map ;
  73.   $tgtfile =$path.':'.$filename.'.'.$tgt ;
  74.   if ($com eq '?') { &help() ; next ; }
  75.   if ($com eq 'd') { &displaydoc($dworkfile) ; next ; }
  76.   if ($com eq 'o') { &outputdoc($dworkfile) ; next ; }
  77.   if ($com eq 'v') { &version() ; next ; }
  78.   if ($com eq 'q') { &ending() ; last ; }
  79.   if ($com eq 's') { &selSource() ; next ; }
  80.   if ($com eq 't') { &displaydoc($dtd.'.dtd') ; next ; }
  81.   if ($com eq 'm') { &selMap() ; next ; }
  82.   if ($com eq 'a') { &selTarget() ; next ; }
  83.   if ($com eq 'f') { &forming() ; next ; }
  84.   if ($com eq 'r') { &review() ; next ; }
  85.   if ($com eq 'i') { &displayitext ; next ; }
  86.   if ($com eq 'x') { &displayctext ; next ; }
  87.   if ($com eq 'l') { &setLines() ; next ; }
  88.   if ($com eq 'c') { &setCols() ; next ; }
  89.   if ($com eq 'h') { &converthtml() ; next ; }
  90.   print("  ?\n") ;
  91. }
  92. exit(0);
  93. #
  94. # Initialize Global Variables
  95. sub openning {
  96.   local($doc) ;
  97.   %tcount = () ;  %tid = () ; %tatt = () ; $hook = '' ; $gi = '' ;
  98.   $inhibit = '' ; $lastGI = '' ; %thook = () ; $hookGI = '' ;
  99.   $delcr = 0 ; $repstr = 0 ; $escstr = 0 ;
  100.   $line = 0 ; $filename = '' ; $dispitext = 0 ; $dispctext = 0 ; $path = '' ;
  101.   $dtd = '' ;
  102.   $filename = '' ; $esifile = '' ; $mapifile = '' ; $tgtfile = '' ;
  103.   $dworkfile = &tempFile() ;
  104.   $mworkfile = '' ; $eworkfile = '' ;
  105.   %rpostable = () ; $rpos = 0 ; %xpostable = () ;
  106.   $lengthlength = 10 ;
  107.   $eot = '~' x $lengthlength ;
  108. #
  109. # Set the Online Manual
  110.   unless(open(DWORK, ">$dworkfile")) { print("  Can not open working-file `$dworkfile' !\n") ; return ; }
  111.   while ($doc = <DATA>) {
  112.     if (substr($doc, 0, 2) eq '!'.$language) { last ; }
  113.   }
  114.   while ($doc = <DATA>) {
  115.     if (substr($doc, 0, 2) eq '!!') { last ; }
  116.     print(DWORK "$doc") ;
  117.   }
  118.   if ($language eq 'E') { print(DWORK "$eerr") ; } else  { print(DWORK "$jerr") ; }
  119.   close(DWORK) ;
  120.   $eerr = '' ; $jerr = '' ;
  121.   &title() ;
  122.   return ;
  123. }
  124. #
  125. # Forming
  126. sub forming {
  127. # local($v, $rpos, $att, $val, $d) ;
  128.   print("  Forming ...\n") ;
  129.   unless (&setesi()) { print("  Source Input process is failed !\n") ; return ; }
  130.   unless (&setmap()) { print("  Map-info Input process is failed !\n") ; return ; }
  131. # while (($tag, $rpos) = each %rpostable) { print("\n $tag $rpos") ; }
  132. # while (($tagexp, $rpos) = each %xpostable) { print("\n $tagexp $rpos") ; }
  133.   unless (&pass1()) { print("  Forming process is failed !\n") ; return ; }
  134. # while (($att, $val) = each %tid) { print("\n $att $val") ; }
  135.   &pass2() ;
  136.   if ($mworkfile ne '') { unlink($mworkfile) ; }
  137.   if ($eworkfile ne '') { unlink($eworkfile) ; }
  138.   print("  Forming process is completed.\n") ;
  139.   return ;
  140. }
  141. #
  142. # Warming up
  143. sub setesi {
  144.   local($e) ;
  145.   $eworkfile = &tempFile() ;
  146.   $esifile = $path.':'.$filename.'.esi' ;
  147.   unless(open(ESI, "<$esifile")) { print("  Can not open source-file `$esifile' !\n") ; return 0 ; }
  148.   unless(open(EWORK, ">$eworkfile")) { print("  Can not open working-file `$eworkfile' !\n") ; return 0 ; }
  149.   while ($e = <ESI>) {
  150.     chop($e) ;
  151.     if (substr($e, 0 ,1) eq '(') { print(EWORK "$e\n") ; next ; }
  152.     if (substr($e, 0 ,1) eq ')') { print(EWORK "$e\n") ; next ; }
  153.     if (substr($e, 0 ,1) eq '-') { ÷($e) ; next ; }
  154.     if (substr($e, 0 ,1) eq '&') { print(EWORK "$e\n") ; next ; }
  155.     if (substr($e, 0 ,1) eq '?') { print(EWORK "$e\n") ; next ; }
  156.     if (substr($e, 0 ,1) eq 'A') { print(EWORK "$e\n") ; next ; }
  157.     if (substr($e, 0 ,1) eq 'D') { print(EWORK "$e\n") ; next ; }
  158.     if (substr($e, 0 ,1) eq 'N') { print(EWORK "$e\n") ; next ; }
  159.     if (substr($e, 0 ,1) eq 'E') { print(EWORK "$e\n") ; next ; }
  160.     if (substr($e, 0 ,1) eq 'I') { print(EWORK "$e\n") ; next ; }
  161.     if (substr($e, 0 ,1) eq 'S') { print(EWORK "$e\n") ; next ; }
  162.     if (substr($e, 0 ,1) eq 's') { print(EWORK "$e\n") ; next ; }
  163.     if (substr($e, 0 ,1) eq 'p') { print(EWORK "$e\n") ; next ; }
  164.     if (substr($e, 0 ,1) eq 'f') { print(EWORK "$e\n") ; next ; }
  165.     if (substr($e, 0 ,1) eq '{') { print(EWORK "$e\n") ; next ; }
  166.     if (substr($e, 0 ,1) eq '}') { print(EWORK "$e\n") ; next ; }
  167.     if (substr($e, 0 ,1) eq 'L') { print(EWORK "$e\n") ; next ; }
  168.     if (substr($e, 0 ,1) eq '#') { print(EWORK "$e\n") ; next ; }
  169.     if (substr($e, 0 ,1) eq 'C') { print(EWORK "$e\n") ; last ; }
  170.     print(' ? $e') ;
  171.   }
  172.   close(ESI) ;
  173.   close(EWORK) ;
  174.   return 1 ;
  175. }
  176. #
  177. sub divide {
  178.   local($e) = @_ ;
  179.   local($data, $length, $nlength, $d, $pos, $npos) ;
  180.   $data = substr($e, 1) ;
  181.   $length = length($data) ;
  182.   $pos = 0 ;
  183.   while (1) {
  184.     $npos = index($data, '\n', $pos) ;
  185.     if ($npos >= 0) {
  186.       $nlength = $npos-$pos+2 ;
  187.       $d = substr($data, $pos, $nlength) ;
  188.       print(EWORK "-$d\n") ;
  189.       $pos += $nlength ;
  190.       if ($pos >= $length) { last ; }
  191.     }
  192.     else {
  193.       $d = substr($data, $pos) ;
  194.       print(EWORK "-$d\n") ;
  195.       last ;
  196.     }
  197.   }
  198.   return ;
  199. }
  200. #
  201. sub setmap {
  202.   local($m, $mm, $rdesc, $rlengthlength, $rlength) ;
  203.   if ($filename eq '') { print("  No Source-file !\n") ; return 0 ; }
  204.   if (($map eq '') || ($tgt eq '')) { print("  No file extension !\n") ; return 0 ; }
  205.   unless (-e $mapfile) { print("  No map-info-file `$mapfile' !\n") ;  return 0 ; }
  206.   unless (open(MAP, "<$mapfile")) { print("  Can not open map-info-file `$mapfile' !\n") ; return 0 ; }
  207.   $mworkfile = &tempFile() ;
  208.   unless(open(MWORK, ">$mworkfile")) { print("  Can not open working-file `$mworkfile' !\n") ; return 0 ; }
  209.   %rpostable = () ; %xpostable = () ;
  210.   $rpos = 0 ;
  211.   $rdesc = 0 ;
  212.   while ($m = <MAP>) {
  213.     $mm = substr($m, 0, 1) ;
  214.     if ($mm eq '!') { next ; }
  215.     if (($mm eq '(') || ($mm eq ')') || ($mm eq 'C')) {
  216.       if ($rdesc) {
  217.         unless (seek(MWORK, $rpos, 0)) { print("  I/O error has occurred !\n") ; return 0 ; }
  218.         syswrite(MWORK, $eot, $lengthlength) ;
  219.         $rpos += $lengthlength ;
  220.       }
  221.       $rdesc = 0 ;
  222.       chop($m) ;
  223.       if ($m =~ m!(.*)\t(.*)!) { $rpostable{$1} = '*' ; $xpostable{$m} = $rpos ; }
  224.                           else { $rpostable{$m} = $rpos ; }
  225.     }
  226.     else {
  227.       $rdesc = 1 ;
  228.       unless (seek(MWORK, $rpos, 0)) { print("  I/O error has occurred !\n") ; return 0 ; }
  229.       $rlength = $lengthlength+length($m)  ;
  230.       $rlengthlength = length($rlength) ;
  231.       $r = (' 'x($lengthlength-$rlengthlength)).$rlength.$m ;
  232.       syswrite(MWORK, $r, $rlength) ;
  233.       $rpos += $rlength ; 
  234.     }
  235.   }
  236.   unless (seek(MWORK, $rpos, 0)) { print("  I/O error has occurred !\n") ; return 0 ; }
  237.   syswrite(MWORK, $eot, $lengthlength) ;
  238.   close(MAP) ;
  239.   close(MWORK) ;
  240.   return 1 ;
  241. }
  242. #
  243. # Pass-1
  244. sub pass1 {
  245.   local($e) ;
  246.   unless (open(MAP, "<$mapfile")) { print("  Can not open map-info-file `$mapfile' !\n") ; return 0 ; }
  247.   unless(open(ESI, "<$eworkfile")) { print("  Can not open working-file `$eworkfile' !\n") ; return 0 ; }
  248.   %tcount = () ; %tid = () ; $hook = '' ;
  249.   while ($e = <ESI>) {
  250.     chop($e) ;
  251.     if (substr($e, 0 ,1) eq '(') { &seek($e) ; next ; }
  252.     if (substr($e, 0 ,1) eq ')') { next ; }
  253.     if (substr($e, 0 ,1) eq '-') { next ; }
  254.     if (substr($e, 0 ,1) eq '&') { next ; }
  255.     if (substr($e, 0 ,1) eq '?') { next ; }
  256.     if (substr($e, 0 ,1) eq 'A') { &hook($e) ; next ; }
  257.     if (substr($e, 0 ,1) eq 'D') { next ; }
  258.     if (substr($e, 0 ,1) eq 'N') { next ; }
  259.     if (substr($e, 0 ,1) eq 'E') { next ; }
  260.     if (substr($e, 0 ,1) eq 'I') { next ; }
  261.     if (substr($e, 0 ,1) eq 'S') { next ; }
  262.     if (substr($e, 0 ,1) eq 's') { next ; }
  263.     if (substr($e, 0 ,1) eq 'p') { next ; }
  264.     if (substr($e, 0 ,1) eq 'f') { next ; }
  265.     if (substr($e, 0 ,1) eq '{') { next ; }
  266.     if (substr($e, 0 ,1) eq '}') { next ; }
  267.     if (substr($e, 0 ,1) eq 'L') { next ; }
  268.     if (substr($e, 0 ,1) eq '#') { next ; }
  269.     if (substr($e, 0 ,1) eq 'C') { last ; }
  270.     if ($dispitext) { print(' ? $e') ; }
  271.   }
  272.   close(ESI) ;
  273.   return 1 ;
  274. }
  275. sub hook {
  276.   local($arg) =@_ ;
  277.   local($t, @values) ;
  278.   $t = substr($arg, 1) ;
  279.   @values = split(/ /, $t) ;
  280.   if (($values[0] eq 'ID') && ($values[2] ne '')) { $hook = $values[2] ; }
  281.   return ;
  282. }
  283. sub seek {
  284.   local($arg) =@_ ;
  285.   local($gi) ;
  286.   $gi = substr($arg, 1) ;
  287.   if ($hook ne '') {
  288.     $tcount{$gi} ++ ;
  289.     $tid{$gi.'_'.$hook} = $tcount{$gi} ;
  290.     $hook = '' ;
  291.  }
  292.   return ;
  293. }
  294. #
  295. # Pass-2
  296. sub pass2 {
  297.   local($e) ;
  298.   open(ESI, "<$eworkfile") ; open(TGT, ">$tgtfile") ;
  299.   unless(open(MWORK, "<$mworkfile")) { print("  Can not open working-file `$mworkfile' !\n") ; return 0 ; }
  300.   $line = 0 ; %tatt = () ; %tav = () ; @tnest = () ; %wav = () ;
  301.   %tclist = () ;
  302.   @datatable = () ; @esctable = () ; $escx = 1 ;
  303.   @stable = () ; @ttable = () ; $rplx = 1 ;
  304.   $inhibit = '' ; $lastGI = '' ; %thook = () ; $hookGI = '' ;
  305.   while ($e = <ESI>) {
  306.     chop($e) ;
  307.     if ($dispitext) { &lprint("\n $e", 0) ; }
  308.     if (substr($e, 0 ,1) eq '(') { &gis($e) ;  next ; }
  309.     if (substr($e, 0 ,1) eq ')') { &gie($e) ;  next ; }
  310.     if (substr($e, 0 ,1) eq '-') { &data($e) ; next ; }
  311.     if (substr($e, 0 ,1) eq '&') { next ; }
  312.     if (substr($e, 0 ,1) eq '?') { next ; }
  313.     if (substr($e, 0 ,1) eq 'A') { &att($e) ; next ; }
  314.     if (substr($e, 0 ,1) eq 'D') { next ; }
  315.     if (substr($e, 0 ,1) eq 'N') { next ; }
  316.     if (substr($e, 0 ,1) eq 'E') { next ; }
  317.     if (substr($e, 0 ,1) eq 'I') { next ; }
  318.     if (substr($e, 0 ,1) eq 'S') { next ; }
  319.     if (substr($e, 0 ,1) eq 's') { next ; }
  320.     if (substr($e, 0 ,1) eq 'p') { next ; }
  321.     if (substr($e, 0 ,1) eq 'f') { next ; }
  322.     if (substr($e, 0 ,1) eq '{') { next ; }
  323.     if (substr($e, 0 ,1) eq '}') { next ; }
  324.     if (substr($e, 0 ,1) eq 'L') { next ; }
  325.     if (substr($e, 0 ,1) eq '#') { next ; }
  326.     if (substr($e, 0 ,1) eq 'C') { &end($e) ;  last ; }
  327.   }
  328.   close(ESI) ; close(TGT) ;
  329.   close(MWORK) ;
  330.   &MacPerl'SetFileInfo($creator, 'TEXT', $tgtfile) ;
  331.   return ;
  332. }
  333. sub end {
  334.   local($arg) = @_ ;
  335.   local($t) ;
  336.   $t = &lookup($arg) ;
  337.   if ($dispitext) { print("\n") ; }
  338.   print(TGT $t) ; if ($dispctext) { print("\n ") ; print($t) ; }
  339.   return ;
  340. }
  341. sub gis {
  342.   local($arg) = @_ ;
  343.   local($t, $att, $value) ;
  344.   $gi = substr($arg, 1) ;
  345.   $lastGI = $gi ;
  346.   $crefgi = $gi ;
  347.   push(@tnest, $gi) ;
  348.   $nest = $#tnest ;
  349.   while (($att, $value) = each %tatt) {
  350.     $tav{$nest.$gi.'_'.$att} = $value ;
  351. #   print("\n ( $nest $gi $att $value") ;
  352.   }
  353.   $t = &lookup($arg) ;
  354.   if ($t ne '') { print(TGT $t) ; if ($dispctext) { print("\n ") ; print($t) ; } }
  355.   $hook = '' ;
  356.   return ;
  357. }
  358. sub gie {
  359.   local($arg) = @_ ;
  360.   local($t, $k, $v) ;
  361.   $gi = substr($arg, 1) ;
  362.   $crefgi = $gi ;
  363.   $lastGI = '~~~~~~~~' ;
  364.   $nest = $#tnest ;
  365.   $t = &lookup($arg) ;
  366.   if ($t ne '') { print(TGT $t) ; if ($dispctext) { print("\n ") ; print($t) ; } }
  367.   %wav = () ; while (($k,$v) = each %tav) { $k=~ m!^(\d+)|(.*)! ; if ($1 != $nest) { $wav{$k} = $v ; } }
  368.   %tav = () ; while (($k,$v) = each %wav) { $tav{$k} = $v ; } %wav = () ;
  369. # while (($k,$v) = each %tav) { print("\n ) $k $v") ; }
  370.   $ngi = pop(@tnest) ;
  371.   %tatt = () ; $hook = '' ; $hookGI = '' ;
  372.   return ;
  373. }
  374. sub data {
  375.   local($arg) = @_ ;
  376.   local($t) ;
  377.   $t = &charconvert(substr($arg, 1)) ;
  378.   if ($hookGI eq $lastGI) { $thook{$hookGI} = $thook{$hookGI}.$t ; }
  379.   if ($t ne '' && ($inhibit ne $lastGI)) { print(TGT $t) ; if ($dispctext) { print("\n ") ; print($t) ; } }
  380.   return ;
  381. }
  382. sub att {
  383.   local($arg) = @_ ;
  384.   local($t, $values, $k, $v) ;
  385.   $t = substr($arg, 1) ;
  386.   @values = split(/ /, $t) ;
  387.   if ($values[2] ne '') { $tatt{$values[0]} = $values[2] ; }
  388. # while (($k,$v) = each %tatt) { print("\n att $k $v") ; }
  389.   return ;
  390. }
  391. #
  392. # Lookup the Map-info
  393. sub lookup {
  394.   local($arg) = @_ ;
  395.   local($k, $rpos, $r, $m, $cexp, $cc, $tagexp, $tag, $exp) ;
  396.   $rpos = $rpostable{$arg} ;
  397.   if ($rpos eq '') { return '' ; }
  398.   if ($rpos eq '*') {
  399.     $cc = 0 ;
  400.     foreach $tagexp (keys %xpostable) {
  401.       $tagexp =~ m!(.*)\t(.*)! ; $tag = $1 ; $exp=$2 ;
  402.       if ($tag eq $arg) {
  403.         $cexp = '$cc = '.$exp ;
  404.         eval($cexp) ;
  405.         if ($@ ne '') { print("  Invalid map-info ! : $@ -> $tag $exp") ; return '' ; }
  406.         if ($cc) { $rpos = $xpostable{$tagexp} ; last ; }
  407.       }
  408.     }
  409.     unless ($cc) { return '' ; }
  410.   }
  411. # print("\n $arg $rpos") ;
  412.   $r = '' ;
  413.   while (1) {
  414.     unless (seek(MWORK, $rpos, 0)) { print("  I/O error has occurred !\n") ; return '' ; }
  415.     $prebuffer = ' ' x $lengthlength ;
  416.     sysread(MWORK, $prebuffer, $lengthlength) ;
  417.     if ($prebuffer eq $eot) { last ; }
  418.     $rlength = $prebuffer + 0 ;
  419.     $m = ' ' x $rlength ;
  420.     sysread(MWORK, $m, $rlength) ;
  421.     $com = substr($m, 0, 1) ;
  422.     $rpos += $rlength ;
  423.     if ($com eq '~') {
  424.       $mapscript = substr($m, 2, $rlength-$lengthlength-2) ;
  425.       eval($mapscript) ; if ($@ ne '') { print("  Invalid map-info ! : $@ -> $mapscript") ; }
  426.       next ;
  427.     }
  428.     if ($com eq "\t") {
  429.       $m = substr($m, 1, $rlength-$lengthlength-1) ;
  430.       chop($m) ;
  431.       $r = $r.&valconvert($m) ;
  432.       next ;
  433.     }
  434.   }
  435.   return $r ;
  436. }
  437. #
  438. # Convert the Character-value
  439. sub charconvert {
  440.   local($arg) = @_ ;
  441.   local($pre, $post, $octals, $octal, $pattern, $d, $data, $esc, $s, $t, $y, $yy) ;
  442. #
  443.   $arg =~ s!\\\\!"\x1f"!eg ;
  444. #
  445.   while (1) {
  446.     if ($arg =~ m!(.*)(\\\d\d\d)(.*)!) {
  447.       $pre = $1 ; $octals = $2; $post = $3 ;
  448.       $octals =~ m!\\(\d\d\d)! ;
  449.       $octal = pack('c', oct($1)) ;
  450.       if ($octal == 10) { $octal = '' ; }
  451.       $arg = $pre.$octal.$post ;
  452.     }
  453.     else { last ; }
  454.   }
  455. #
  456.   if ($delcr) { $arg =~ s!\\n!!g ; } else { $arg =~ s!\\n!\n!g ;} 
  457. #
  458.   $arg =~ s!\x1f!"\\\\"!eg ;
  459. #
  460.   if ($escstr) {
  461.     $pattern = '[' ; foreach $d (@datatable) { $pattern .= $d ; } $pattern .= ']' ;
  462.     if ($pattern ne '[]') {
  463.       $arg =~ tr!\\!\x1d! ; $arg =~ tr!^!\x1c! ; $arg =~ tr!$!\x1b! ;
  464.       if ($arg =~ m!$pattern!) {
  465.         foreach $d (1 .. $#datatable) {
  466.           $data = $datatable[$d] ;
  467.           $esc = "\xff".pack("C", $d) ;
  468.           $arg =~ s!$data!$esc!g ;
  469.         }
  470.         foreach $d (1 .. $#esctable) {
  471.           $data = '\xff'.pack("C", $d) ;
  472.           $esc = $esctable[$d] ;
  473.           $arg =~ s!$data!$esc!g ;
  474.         }
  475.       }
  476.       $arg =~ tr!\x1d!\\! ; $arg =~ tr!\x1c!^! ; $arg =~ tr!\x1b!$! ;
  477.     }
  478.   }
  479. #
  480.   if ($repstr) {
  481.     foreach $d (1 .. $#stable) {
  482.       $s = $stable[$d] ; $t = $ttable[$d] ;
  483.       $arg =~ s!$s!$t!g ;
  484.     }
  485.   }
  486.   return $arg ;
  487. }
  488. #
  489. # Convert the Changing-value
  490. sub valconvert {
  491.   local($arg) = @_ ;
  492.   local($pre, $post, $attr, $val, $refgi, $ref, $refatt, $refid) ;
  493.   while (1) {
  494.     if ($arg =~ m!(.*)~(.*)~(.*)!) {
  495.       $pre = $1 ; $attr = $2; $post = $3 ;
  496.       if (substr($attr, 0, 1) eq '$') { eval('$val='.$attr.';') ; }
  497.       else {
  498.         if ($attr =~ m!(.*)_(.*)!) { $refgi = $1 ; $refatt = $2 ; }
  499.                               else { $refgi = $crefgi ; $refatt = $attr ; }
  500.         if (substr($refgi, 0 , 1) eq '#') {
  501.           $refgi = substr($refgi, 1) ;
  502.           if (($refatt eq 'ID') || ($refatt eq 'REFID')) {
  503.             $refid = $tav{$nest.$crefgi.'_'.$refatt} ;
  504.             $val = $tid{$refgi.'_'.$refid} ;
  505.           }
  506.           else { print("\n Illegal use ! -> $arg") ; return '' ; }
  507.         }
  508.         else {
  509.           $val = $tav{$nest.$refgi.'_'.$refatt} ;
  510.         }
  511.       }
  512.       $arg = $pre.$val.$post ;
  513.     }
  514.     else { last ; }
  515.   }
  516.   $arg =~ s!\\n!\n!g ;
  517.   return $arg ;
  518. }
  519. #
  520. # Select the Source-file
  521. sub selSource {
  522.   $filename = &MacPerl'Choose(&GUSI'AF_FILE, 0, "Select Source-file", &GUSI'pack_sa_constr_file('TEXT')) ;
  523.   if ($filename eq '') { return ; }
  524.   unless ($filename =~ m/(.*)\.($esi)$/) { print("  `$esifile' is not source-file !\n") ; return ; }
  525.   $filename = $1 ;
  526.   $path = '' ;
  527.   while (1) {
  528.     unless ($filename =~ m!(.*):(.*)$!) { last ; }
  529.     $path = $path.':'.$1 ;
  530.     $filename = $2 ;
  531.   }
  532.   $path = substr($path, 1) ;
  533.   $esifile = $path.':'.$filename.'.esi' ;
  534.   unless(open(ESI, "<$esifile")) { print("  Can not open source-file `$esifile' !\n") ; return ; }
  535.   while ($e = <ESI>) {
  536.     chop($e) ;
  537.     if (substr($e, 0 ,1) eq '(') { $dtd = substr($e, 1) ; last ; }
  538.   }
  539.   close(ESI) ;
  540.   print("  The source-file is `$esifile'.\n") ;
  541.   print("  The DTD is `$dtd'.\n") ;
  542.   return ;
  543. }
  544. #
  545. # Select the Mapping
  546. sub selMap {
  547.   local($direct) ;
  548.   $direct = &MacPerl'Pick("Select the target", 'PageMaker[MPM]', 'TeX[MTX]', 'WWW[MWW]', 'TEXT[MTT]') ;
  549.   if ($direct eq '') {
  550.     $map = &MacPerl'Ask('The file extension of map-info-file is ?') ;
  551.     $tgt = &MacPerl'Ask('The file extension of target-file is ?') ;
  552.     if ($map ne '') { print("  The file extension of map-info-file is `$map'.\n") ; }
  553.     if ($tgt ne '') { print("  The file extension of target-file is `$tgt'.\n") ; }
  554.     return ;
  555.   }
  556.   if ($direct eq 'PageMaker[MPM]') { $map = 'MPM' ; $tgt = 'pm' ; }
  557.   if ($direct eq 'TeX[MTX]') { $map = 'MTX' ; $tgt = 'tex' ; }
  558.   if ($direct eq 'WWW[MWW]') { $map = 'MWW' ; $tgt = 'htm' ; }
  559.   if ($direct eq 'TEXT[MTT]') { $map = 'MTT' ; $tgt = 'txt' ; }
  560.   print("  The target is `$direct'.\n") ;
  561.   print("  The file extension of map-info-file is `$map'.\n") ;
  562.   print("  The file extension of target-file is `$tgt'.\n") ;
  563.   return ;
  564. }
  565. #
  566. # Select the File Creator of the Target-File
  567. sub selTarget {
  568.   $creator = &MacPerl'Pick('Select the file creator of target-file', 'ttxt', 'Edt7') ;
  569.   if ($creator eq '') { $creator = &MacPerl'Ask('The file creator of target-file is ?') ; if ($creator eq '') { return ; } }
  570.   print("  The file creator of target-file is '$creator'.\n") ;
  571.   return ;
  572. }
  573. #
  574. # Exit the Process
  575. sub ending {
  576.   unlink($dworkfile) ;
  577.   &command("The process is completed.") ;
  578. }
  579. #
  580. # Dispaly the Title of SgmlForm
  581. sub title {
  582.   &version() ;
  583.   print <<EOF ;
  584.  Please type `?'
  585.  
  586. EOF
  587.   return ;
  588. }
  589. #
  590. # Display the Version of SgmlForm
  591. sub version {
  592.   print <<EOF ;
  593.  
  594.  SgmlForm ver.$ver
  595.  (c) 1996 KISI
  596.  
  597. EOF
  598.   return ;
  599. }
  600. #
  601. # Accept the Command
  602. sub command {
  603.   local($prompt) = @_ ;
  604.   local ($accept) ;
  605.   print(" $prompt > ") ;
  606.   $accept = <> ;
  607.   chop($accept) ;
  608.   if ($accept ne '') { return $accept ; }
  609.                 else { return '/' ; }
  610. }
  611. #
  612. # Display the Line
  613. sub lprint {
  614.   local($data, $control) = @_ ;
  615.   local($a, $b, @sdata, $com) ;
  616.   if (substr($data, 0, 1) eq "\n") { $line ++ ; }
  617.   @sdata = split(//, $data) ;
  618.   $b = 0 ;
  619.   foreach $a (@sdata) {
  620.     print("$a") ;
  621.     $b += length($a) ;
  622.     if ($b >= $columns) { print("\n") ; $line ++ ; $b = 0 ; }
  623.     if ($control && ($line >= $lines)) {
  624.       print("\n") ;
  625.       $com = &command(" Next : return, Cancel : others") ;
  626.       print("\n") ;
  627.       if ($com ne '/') { return 0 ; }
  628.       $line = 0 ;
  629.     }
  630.   }
  631.   return 1 ;
  632. }
  633. #
  634. #
  635. sub review {
  636.   $txtfile = &MacPerl'Choose(&GUSI'AF_FILE, 0, "Select Text-file", &GUSI'pack_sa_constr_file('TEXT')) ;
  637.   if ($txtfile eq '') { return ; }
  638.   &displaydoc($txtfile) ;
  639.   return ;
  640. }
  641. #
  642. # Display the Document
  643. sub displaydoc {
  644.   local($docfile) = @_ ;
  645.   local($doc) ;
  646.   unless (open(DOC, "<$docfile")) { print("\n Can not open the document `$docfile' !\n") ;  return ; }
  647.   $line = 0 ;
  648.   while ($doc = <DOC>) {
  649.     chop($doc) ;
  650.     unless (&lprint("\n $doc", 1)) { print("\n The display is aborted.\n") ; close(DOC) ; return ; }
  651.   }
  652.   close(DOC) ;
  653.   print("\n\n -----\n") ;
  654.   return ;
  655. }
  656. #
  657. # Text to HTML
  658. sub converthtml {
  659.   $txtfile = &MacPerl'Choose(&GUSI'AF_FILE, 0, "Select Text-file", &GUSI'pack_sa_constr_file('TEXT')) ;
  660.   if ($txtfile eq '') { return ; }
  661.   &outputdoc($txtfile) ;
  662.   return ;
  663. }
  664. # Save HTML Document
  665. sub outputdoc {
  666.   local($docfile) = @_ ;
  667.   local($doc, $docx, $olist, $olistx, $ol, $item, $table, $no, $h, @tab, $pre, $srcalt, $err, $about, $outfilename) ;
  668.   unless (open(DOC, "<$docfile")) { print("\n Can not open the document `$docfile' !\n") ;  return ; }
  669.   $about = '' ;
  670.   while ($doc = <DOC>) {
  671.     chop($doc) ;
  672.     if ($doc =~ m!^\#\s{1,}(.*)$!) { $about = $1 ; last ; }
  673.   }
  674.   if ($about eq '') { print("\n Can not find `#' header !\n") ; }
  675.   close(DOC) ;
  676.   $outfilename = $about.'.htm' ;
  677. #
  678.   $outfile = &MacPerl'Choose(&GUSI'AF_FILE, 0, "", "", &GUSI'CHOOSE_NEW + &GUSI'CHOOSE_DEFAULT, "$outfilename") ;
  679.   if ($outfile eq '') { return ; }
  680.   unless (open(DOC, "<$docfile")) { print("\n Can not open the document `$docfile' !\n") ;  return ; }
  681.   unless (open(OUT, ">$outfile")) { print("\n Can not open the document `$outfile' !\n") ;  return ; }
  682.   $olist = 0 ; $olistx = 0 ; $table = 0 ; $pre = 0 ; $err = 0 ;
  683.   print(OUT "<!DOCTYPE HTML SYSTEM []>\n") ;
  684.   print(OUT "<HTML>\n<HEAD>\n<TITLE>$about</TITLE>\n</HEAD>\n") ;
  685.   print(OUT "<BODY>\n") ;
  686.   while ($doc = <DOC>) {
  687.     chop($doc) ;
  688.     if ($doc eq '') { next ; }
  689. # Escape
  690.     $doc =~ s!&!&!g ;
  691.     $doc =~ s!<!<!g ;
  692.     $doc =~ s!>!>!g ;
  693. # header
  694.     if ($doc =~ m!^\#\s{1,}(.*)$!) { next ; }
  695. # image
  696.     if ($doc =~ m!^\*\s{1,}(.*)$!) {
  697.       $srcalt = $1 ;
  698.       if ($srcalt =~ m!^(.*)\s{1,}(.*)$!) { print(OUT "<IMG SRC=\"$1\" ALT=\"$2\">\n") ; }
  699.         else { print(OUT "<IMG SRC=\"$srcalt\">\n") ; }
  700.        next ;
  701.     }
  702. # table
  703.     if ($doc =~ m!^-!) {
  704.       if ($pre) { print(OUT "</PRE>\n") ; $pre = 0 ; }
  705.       if ($table == 0) { $table = 1 ; print(OUT "<TABLE BORDER=1>\n") ; @tab =() ; next ; }
  706.       if ($table == 1) { $table = 2 ; next ; }
  707.       if ($table == 2) { $table = 0 ; print(OUT "</TABLE>\n") ; next ; }
  708.     }
  709. # olist
  710.     if ($doc =~ m!^\((\d+\.?\d*\.?\d*)\)\s+(.*)$!) {
  711.       if ($pre) { print(OUT "</PRE>\n") ; $pre = 0 ; }
  712.       $no = $1 ; $item = $2 ;
  713.       $no =~ m!(\d+)\.?(\d*)\.?(\d*)! ;
  714.       if (($2 eq '') && ($3 eq '')) { $olist = 1 ; }
  715.       if (($2 ne '') && ($3 eq '')) { $olist = 2 ; }
  716.       if (($2 ne '') && ($3 ne '')) { $olist = 3 ; }
  717.       if ($olistx == 0) {
  718.         print(OUT "<OL>\n<LI>$item\n") ;
  719.         $olistx = $olist ; next ;
  720.       }
  721.       if ($olistx < $olist) {
  722.         print(OUT "<OL>\n<LI>$item\n") ;
  723.         $olistx = $olist ; next ;
  724.       }
  725.       if ($olistx > $olist) { 
  726.         while ($olistx-- > $olist) { print(OUT "</OL>\n") ; }
  727.         print(OUT "<LI>$item\n") ;
  728.         $olistx = $olist ; next ;
  729.       }
  730.       print(OUT "<LI>$item\n") ; next ;
  731.     }
  732. # heading
  733.     if ($doc =~ m!^(\d+\.?\d*\.?\d*)\s+(.*)$!) {
  734.       if ($pre) { print(OUT "</PRE>\n") ; $pre = 0 ; }
  735.       if ($olistx > 0) { while ($olistx--) { print(OUT "</OL>\n") ; } $olistx = 0 ; }
  736.       $no = $1 ; $item = $2 ;
  737.       $no =~ m!^(\d+)\.?(\d*)\.?(\d*)! ;
  738.       if (($2 eq '') && ($3 eq '')) { $h = 1 ; }
  739.       if (($2 ne '') && ($3 eq '')) { $h = 2 ; }
  740.       if (($2 ne '') && ($3 ne '')) { $h = 3 ; }
  741.       if ($h == 1) { print(OUT "<H1>$item</H1>\n") ; next ; }
  742.       if ($h == 2) { print(OUT "<H2>$item</H2>\n") ; next ; }
  743.       if ($h == 3) { print(OUT "<H3>$item</H3>\n") ; next ; }
  744.     }
  745. # description in table
  746.     if ($table > 0) {
  747.       $docx = $doc ;
  748.       while (1) {
  749.         unless ($docx =~ m!(.*)\s{2,}(.*)!) { last ; }
  750.         if ($2 ne '') { push (@tab, $2) ; }
  751.         $docx = $1 ;
  752.       }
  753.       if ($1 ne '') { push (@tab, $1) ; }
  754.       print(OUT "<TR>") ;
  755.       while (1) {
  756.         $item = pop(@tab) ;
  757.         if ($item eq '') { last ; }
  758.         if ($table == 1) { print(OUT "<TH>$item</TH>") ; }
  759.         if ($table == 2) { print(OUT "<TD>$item</TD>") ; }
  760.       }
  761.       print(OUT "</TR>\n") ;
  762.       next ;
  763.     }
  764. # preformatted
  765.     if ($doc =~ m!^ {2,}(.*)$!) {
  766.       if ($pre) { print(OUT "$doc\n") ; next ; }
  767.       $pre = 1 ;
  768.       print(OUT "<PRE>\n$doc\n") ; next ;
  769.     }
  770. # paragraph 
  771.     if ($doc =~ m!^ {1}(.*)$!) {
  772.       if ($pre) { print(OUT "</PRE>\n") ; $pre = 0 ; }
  773.       print(OUT "<P>$1\n") ;
  774.       next ;
  775.     }
  776.     print("\n Formating Error ! : $doc \n") ;
  777.     if ($err > 10) { return ; } else { $err++ ; }
  778.   }
  779. # end of document
  780.   if ($pre) { print(OUT "</PRE>\n") ; $pre = 0 ; }
  781.   if ($olistx > 0) { while ($olistx--) { print(OUT "</OL>\n") ; } $olistx = 0 ; }
  782.   print(OUT "</BODY>\n</HTML>\n") ;
  783.   close(DOC) ;
  784.   close(OUT) ;
  785.   &MacPerl'SetFileInfo($creator, 'TEXT', $outfile) ;
  786.   return ;
  787. }
  788. #
  789. # Switche to Display the input text 
  790. sub displayitext {
  791.   local($disp) = @_ ;
  792.   $dispitext ^= 1 ;
  793.   if ($dispitext) { print("  Display the input text.\n") ; }
  794.              else { print("  No display the input text.\n") ; }
  795.   return ;
  796. }
  797. #
  798. # Switche to Display the converted text 
  799. sub displayctext {
  800.   local($disp) = @_ ;
  801.   $dispctext ^= 1 ;
  802.   if ($dispctext) { print("  Display the converted text.\n") ; }
  803.              else { print("  No display the converted text.\n") ; }
  804.   return ;
  805. }
  806. #
  807. # Set the Number of Lines displayed
  808. sub setLines {
  809.   local($ln) ;
  810.   while (1) {
  811.     $ln = &command("Lines displayed is $lines.  number : lines, Cancel : return") ;
  812.     if ($ln eq '/') { return ; }
  813.     if ($ln =~ m!^\d{1,}$!) { $lines = 0+$ln ; return ; }
  814.   }
  815. }
  816. #
  817. # Set the Number of Columns displayed
  818. sub setCols {
  819.   local($cn) ;
  820.   while (1) {
  821.     $cn = &command("Columns displayed is $columns.  number : columns, Cancel : return") ;
  822.     if ($cn eq '/') { return ; }
  823.     if ($cn =~ m!^\d{1,}$!) { $columns = 0+$cn ; return ; }
  824.   }
  825. }
  826. #
  827. # Make the Temporary-working-file
  828. sub tempFile {
  829.   local($temp) ;
  830.   while (1) {
  831.     $temp = 'tempfile-'.int(rand(100)).'-'.int(rand(100)).'-'.int(rand(100)) ;
  832.     unless (-e $temp) { last ; }
  833.   }
  834.   return $temp ;
  835. }
  836. #
  837. # Display the Help Message
  838. sub help {
  839.   if ($language eq 'E') {
  840.   print <<EOF ;
  841.  
  842.  The format of command line :
  843.   f{}[s][m][t(c)] > command
  844.  
  845.  Where,
  846.    f   the filename of source-file
  847.    d   the filename of DTD-file
  848.    s   the file extension of source-file
  849.    m   the file extension of map-info-file
  850.    t   the file extension of target-file
  851.    c   the file creator of output-file
  852.  
  853.  Command :
  854.    q   quit
  855.    l   set the number of lines displayed
  856.    c   the number of columns displayed
  857.    ?   display the help message
  858.    d   display the online manual
  859.    o   save the online manual
  860.    v   display the version of SgmlForm
  861.    r   review the text file
  862.    t   display the document type definition
  863.    s   select the source-file(ESIS-format)
  864.    m   select the mapping
  865.    a   select the file creator of target-file
  866.    f   form to the target from the source
  867.    i   display the input text
  868.    x   display the converted text
  869.    h   Convert to HTML-format from the text-format
  870.  
  871. EOF
  872.   }
  873.   if ($language eq 'J') {
  874.   print <<EOF ;
  875.  
  876.  ÉRÉ}ÉìÉhçsÇÃå`éÆ
  877.   f{d}[s][m][t(c)] > ÉRÉ}ÉìÉh
  878.  
  879.  Ç±Ç±Ç≈ÅC
  880.    f    É\Å[ÉXÉtÉ@ÉCÉãÇÃñºëO
  881.    d    É\Å[ÉXÉtÉ@ÉCÉãÇÃï∂èëå^íËã`
  882.    s    É\Å[ÉXÉtÉ@ÉCÉãÇÃägí£éq
  883.    m    É}ÉbÉvèÓïÒÇÃägí£éq
  884.    t    É^Å[ÉQÉbÉgÉtÉ@ÉCÉãÇÃägí£éq
  885.    c    èoóÕÉtÉ@ÉCÉãÇÃÉNÉäÉGÅ[É^
  886.  
  887.   ÉRÉ}ÉìÉh
  888.    q    èàóùÇÃèIóπ
  889.    l    ï\é¶çsêîÇÃê›íË
  890.    c    ï\é¶åÖêîÇÃê›íË
  891.    ?    ÉwÉãÉvÉÅÉbÉZÅ[ÉWÇï\é¶
  892.    d    SgmlFormÇÃÉIÉìÉâÉCÉìÉ}ÉjÉÖÉAÉãÇï\é¶
  893.    o    SgmlFormÇÃÉIÉìÉâÉCÉìÉ}ÉjÉÖÉAÉãÇï€ë∂èoóÕ
  894.    v    Ç±ÇÃSgmlFormÇÃî≈Çï\é¶
  895.    r    É^Å[ÉQÉbÉgÉtÉ@ÉCÉãÅiïœä∑åãâ ÅjÇï\é¶
  896.    t    ï∂èëå^íËã`Çï\é¶
  897.    s    É\Å[ÉXÉtÉ@ÉCÉãÅiESISå`éÆÅjÇëIë
  898.    m    É}ÉbÉsÉìÉOÇëIë
  899.    a    É^Å[ÉQÉbÉgÉtÉ@ÉCÉãÇÃÉNÉäÉGÅ[É^ÇëIë
  900.    f    É\Å[ÉXÉtÉ@ÉCÉãÇ©ÇÁÉ^Å[ÉQÉbÉgÉtÉ@ÉCÉãÇ÷ïœä∑
  901.    i    ì¸óÕǵÇΩÉeÉLÉXÉgÇÃï\é¶
  902.    x    ïœä∑Ç≥ÇÍÇΩÉeÉLÉXÉgÇÃï\é¶
  903.  
  904. EOF
  905.   }
  906.   return ;
  907. }
  908. #
  909. ######## The following subroutines is buildin-functions of SgmlForm ########
  910. sub Value {
  911.   unless ($#_ == 0) { print("\n Illegal number of arguments in Value ! -> $mapscript") ; return '' ; }
  912.   local($refatt) = @_ ;
  913.   local($val, $k, $v) ;
  914. # while (($k, $v) = each %tav) { print("\n $k $v") ; }
  915.   $val = $tav{$nest.$crefgi.'_'.$refatt} ;
  916.   return $val ;
  917. }
  918. #
  919. sub Refer {
  920.   unless ($#_ == 1) { print("\n Illegal number of arguments in Refer ! -> $mapscript") ; return '' ; }
  921.   local($refgi, $refatt) = @_ ;
  922.   local($refid, $val) ;
  923.   if (($refatt eq 'ID') || ($refatt eq 'REFID')) {
  924.     $refid = $tav{$nest.$crefgi.'_'.$refatt} ;
  925.     $val = $tid{$refgi.'_'.$refid} ;
  926.   }
  927.   else { print("\n Illegal use in Refer ! -> $mapscript") ; return '' ; }
  928.   return $val ;
  929. }
  930. sub Inhibit {
  931.   unless ($#_ == 0) { print("\n Illegal number of arguments in Inhibit ! -> $mapscript") ; return ; }
  932.   local($gi) = @_ ;
  933.   $inhibit = $gi ;
  934.   return ;
  935. }
  936. #
  937. sub Hook {
  938.   unless ($#_ == 0) { print("\n Illegal number of arguments in Hook ! -> $mapscript") ; return ; }
  939.   local($gi) = @_ ;
  940.   $hookGI = $gi ;
  941.   return ;
  942. }
  943. #
  944. sub Data {
  945.   unless ($#_ == 0) { print("\n Illegal number of arguments in Data ! -> $mapscript") ; return '' ; }
  946.   local($gi) = @_ ;
  947.   local($v) ;
  948.   $v = $thook{$gi} ;
  949.   $thook{$gi} = '' ;
  950.   return $v ;
  951. }
  952. #
  953. sub GraphicSize {
  954.   unless ($#_ == 1) { print("\n Illegal number of arguments in GraphicSize ! -> $mapscript") ; return '' ; }
  955.   local($grfile, $type) = @_ ;
  956.   local($r, $w, $h, @a, $pbuffer, $top, $left, $bottom, $right) ;
  957. #
  958.   if (($type eq 'ps') || ($type eq 'PS')) {
  959.     unless (open(EPS, "<$grfile")) { print("\n Can not open the EPS-file `$grfile' !") ; return '' ; }
  960.     while ($eps = <EPS>) {
  961.       chop($eps) ;
  962.       if (substr($eps, 0, 14) eq '%%BoundingBox:') {
  963.         $r = substr($eps, 15) ;
  964.         @a = split(/ /, $r) ;
  965.         close(EPS) ;
  966.         @a = ($a[2],$a[3]) ;
  967.         return @a ;
  968.       }
  969.     }
  970.   }
  971. #
  972.   if (($type eq 'pict') || ($type eq 'PICT')) {
  973.     unless (open(PIC, "<$grfile")) { print("  Can not open PICT-file `$grfile' !\n") ; return '' ; }
  974.     $pbuffer = ' ' x 514 ;
  975.     sysread(PIC, $pbuffer, 514) ;
  976.     sysread(PIC, $pbuffer, 2) ; $top = unpack("S", $pbuffer) ;
  977.     sysread(PIC, $pbuffer, 2) ; $left = unpack("S", $pbuffer) ;
  978.     sysread(PIC, $pbuffer, 2) ; $bottom = unpack("S", $pbuffer) ;
  979.     sysread(PIC, $pbuffer, 2) ; $right = unpack("S", $pbuffer) ;
  980.     close(PIC) ;
  981.     @a = ($right-$left, $bottom-$top) ;
  982.     return @a ;
  983.   }
  984.   print("\n Illegal use in GraphicSize ! -> $mapscript") ; return '' ;
  985. }
  986. #
  987. sub Convert {
  988.   unless ($#_ == 0) { print("\n Illegal number of arguments in Convert ! -> $mapscript") ; return '' ; }
  989.   local($s) = @_ ;
  990.   return &valconvert($s) ;
  991. }
  992. #
  993. sub Begin {
  994.   unless ($#_ == 0) { print("\n Illegal number of arguments in Begin ! -> $mapscript") ; return ; }
  995.   local($clistn) = @_ ;
  996.   if ($tclist{$clistn} eq '') { $tclist{$clistn} = '0' ; }
  997.   @clist = split(/,/, $tclist{$clistn}) ;
  998.   push(@clist, '0') ;
  999.   $list = join(',', @clist) ;
  1000.   $tclist{$clistn} = $list ;
  1001.   return ;
  1002. }
  1003. #
  1004. sub Level {
  1005.   unless ($#_ == 0) { print("\n Illegal number of arguments in Level ! -> $mapscript") ; return '' ; }
  1006.   local($clistn) = @_ ;
  1007.   local(@clist) ;
  1008.   @clist = split(/,/, $tclist{$clistn}) ;
  1009.   return $#clist ;
  1010. }
  1011. #
  1012. sub Nest {
  1013.   unless ($#_ == 0) { print("\n Illegal number of arguments in Nest ! -> $mapscript") ; return '' ; }
  1014.   local($clistn) = @_ ;
  1015.   local(@clist, $list) ;
  1016.   @clist = split(/,/, $tclist{$clistn}) ;
  1017.   shift(@clist) ;
  1018.   $list = join('.', @clist) ;
  1019.   return $list ;
  1020. }
  1021. #
  1022. sub Number {
  1023.   unless ($#_ == 0) { print("\n Illegal number of arguments in Number ! -> $mapscript") ; return '' ; }
  1024.   local($clistn) = @_ ;
  1025.   local(@clist) ;
  1026.   @clist = split(/,/, $tclist{$clistn}) ;
  1027.   return pop(@clist)  ;
  1028. }
  1029. #
  1030. sub Count {
  1031.   unless ($#_ == 0) { print("\n Illegal number of arguments in Count ! -> $mapscript") ; return '' ; }
  1032.   local($clistn) = @_ ;
  1033.   local(@clist, $c, $list) ;
  1034.   @clist = split(/,/, $tclist{$clistn}) ;
  1035.   $c = pop(@clist) ;
  1036.   $c ++ ;
  1037.   push(@clist, $c) ;
  1038.   $list = join(',', @clist) ;
  1039.   $tclist{$clistn} = $list ;
  1040.   return $c ;
  1041. }
  1042. #
  1043. sub End {
  1044.   unless ($#_ == 0) { print("\n Illegal number of arguments in End ! -> $mapscript") ; return ; }
  1045.   local($clistn) = @_ ;
  1046.   local(@clist, $list) ;
  1047.   @clist = split(/,/, $tclist{$clistn}) ;
  1048.   pop(@clist) ; 
  1049.   $list = join(',', @clist) ;
  1050.   $tclist{$clistn} = $list ;
  1051.   return ;
  1052. }
  1053. #
  1054. sub DeleteCr {
  1055.   unless ($#_ == 0) { print("\n Illegal number of arguments in DeleteCr ! -> $mapscript") ; return ; }
  1056.   local($onoff) = @_ ;
  1057.   $delcr = $onoff ;
  1058.   return ;
  1059. }
  1060. #
  1061. sub Replace {
  1062.   unless ($#_ == 0) { print("\n Illegal number of arguments in Replace ! -> $mapscript") ; return ; }
  1063.   local($onoff) = @_ ;
  1064.   $repstr = $onoff ;
  1065.   return ;
  1066. }
  1067. #
  1068. sub Escape {
  1069.   unless ($#_ == 0) { print("\n Illegal number of arguments in Escape ! -> $mapscript") ; return ; }
  1070.   local($onoff) = @_ ;
  1071.   $escstr = $onoff ;
  1072.   return ;
  1073. }
  1074. #
  1075. sub DefineEscape {
  1076.   unless ($#_ == 1) { print("\n Illegal number of arguments in DefineEscape ! -> $mapscript") ; return ; }
  1077.   local($data, $esc) = @_ ;
  1078.   if ($data eq "\\") { $data = "\x1d" ; }
  1079.   if ($data eq '^')  { $data = "\x1c" ; }
  1080.   if ($data eq '$')  { $data = "\x1b" ; }
  1081.   $datatable[$escx] = $data ;
  1082.   $esctable[$escx] = $esc ;
  1083.   $escx ++ ;
  1084.   return ;
  1085. }
  1086. #
  1087. sub DefineReplace {
  1088.   unless ($#_ == 1) { print("\n Illegal number of arguments in DefineReplace ! -> $mapscript") ; return ; }
  1089.   local($data, $rpl) = @_ ;
  1090.   $stable[$rplx] = $data ;
  1091.   $ttable[$rplx] = $rpl ;
  1092.   $rplx ++ ;
  1093.   return ;
  1094. }
  1095. #
  1096. sub Display {
  1097.   unless ($#_ == 0) { print("\n Illegal number of arguments in Display ! -> $mapscript") ; return ; }
  1098.   local($data) = @_ ;
  1099.   &lprint("\n ".$data, 0) ;
  1100.   return ;
  1101. }
  1102. #
  1103. #-------------- The following data is the online manual about SgmlForm ------------
  1104. # ?X Begining of Error Message, X(E or J) means the dispaly language
  1105. # !X Begining of Document, X(E or J) means the dispaly language
  1106. # !! End of ErrorMessage/Document
  1107. #
  1108. __END__
  1109. ?E
  1110.  SgmlForm.cfg defines the path to Perl-library and default values of environment-variables.
  1111.  Set SgmlForm.cfg into the same folder where SgmlForm.pl exists.
  1112.  You can set any value of environment variables except the display-language and the path of Perl library during the run-time.
  1113.  The format of SgmlForm.cfg is follow as :
  1114.  
  1115. -----------------------------------------------------------------------------------------------
  1116.   Format            Meaning                       Default Value
  1117. -----------------------------------------------------------------------------------------------
  1118.   PATH=string      Full path name to Perl-library   Not option
  1119.   LANGUAGE=string  Display-language                 E 'J' means Japanese. 'E' means English.
  1120.   LINES=number     Number of lines displayed        30
  1121.   COLUMNS=number   Number of columns displayed      70
  1122.   ESIS=string      File extension of source-file    esi
  1123.   MAP=string       File extension of map-info-file  MPM
  1124.   TARGET=string    File extension of target-file    pm
  1125.   CREATOR=string   File creator of target-file      ttxt
  1126. -----------------------------------------------------------------------------------------------
  1127. ?J
  1128.  ä¬ã´ïœêîÉtÉ@ÉCÉãÅgSgmlForm.cfgÅhÇÕPerlÉâÉCÉuÉâÉäÇ÷ÇÃÉpÉXÇΔä¬ã´ïœêîÇÃèâä˙ílÇíËã`Ç∑ÇÈÉtÉ@ÉCÉãÇ≈Ç∑ÅB
  1129.  ÉIÉìÉâÉCÉìÉ}ÉjÉÖÉAÉãÇÃï\é¶åæåÍÇΔPerlÉâÉCÉuÉâÉäÇ÷ÇÃÉpÉXà»äOÇÃä¬ã´ïœêîÇÃílÇÕé¿çséûDžLJïœçXÇ≈Ç´Ç‹Ç∑ÅB
  1130.  SgmlForm.cfgÇSgmlForm.plÇΔìØÇ∂ÉtÉHÉãÉ_Å[Ç…íuǢǃâ∫Ç≥Ç¢ÅB
  1131.  SgmlForm.cfgÇÃèëéÆÇÕéüÇÃÇΔÇ®ÇËÇ≈Ç∑ÅB
  1132. ---------------------------------------------------------------------------------------------------------
  1133.   èëéÆ                ï∂éöóÒñîÇÕêîéöóÒÇÃà”ñ°        è»ó™éûíl
  1134. ---------------------------------------------------------------------------------------------------------
  1135.   PATH=ï∂éöóÒ      PerlÉâÉCÉuÉâÉäÇ÷ÇÃÉpÉX            è»ó™ïsâ¬
  1136.   LANGUAGE=ï∂éö    ÉIÉìÉâÉCÉìÉ}ÉjÉÖÉAÉãÇÃï\é¶åæåÍ    E ì˙ñ{åÍÇÃèÍçáÇÕ'J'ÅCâpåÍÇÃèÍçáÇÕ'E'ÇéwíËǵNjÇ∑ÅB
  1137.   LINES=êîéöóÒ     ï\é¶çsêî                          30
  1138.   COLUMNS=êîéöóÒ   ï\é¶åÖêî                          70
  1139.   ESIS=ï∂éöóÒ      É\Å[ÉXÇÃÉtÉ@ÉCÉãägí£éq            esi
  1140.   MAP=ï∂éöóÒ       É}ÉbÉvèÓïÒÇÃÉtÉ@ÉCÉãägí£éq        MPM
  1141.   TARGET=ï∂éöóÒ    É^Å[ÉQÉbÉgÇÃÉtÉ@ÉCÉãägí£éq        pm
  1142.   CREATOR=ï∂éöóÒ   É^Å[ÉQÉbÉgÇÃÉtÉ@ÉCÉãÉNÉäÉGÅ[É^    ttxt
  1143. ---------------------------------------------------------------------------------------------------------
  1144. !!
  1145. !J
  1146. # SgmlFormDžǬǢǃ
  1147.  
  1148. 1 SgmlForm
  1149. * SgmlForm.gif
  1150.  
  1151. (1) SgmlFormÇÕÉtÉäÅ[ÉEÉFÉAÇ≈Ç∑ÅBSgmlFormÇÃîzïzÅEì]ç⁄ÅEñ|àƒÇÕé©óRÇ≈ÅCégópóøÇÕïsóvÇ≈Ç∑Ç™ÅCSgmlFormÇÃé¿çsǙLJÇΩÇÁÇ∑åãâ Ç…ǬǢǃÇÕï€èÿǵNjÇπÇÒÅB
  1152.  
  1153. (2) SgmlFormÇÕÅCSGMLÉpÅ[ÉUÅ[MacSgmlsÇÃèoóÕÉfÅ[É^ÅiESISå`éÆÅjÇì«ÇÒÇ≈ÅCÉ}ÉbÉvèÓïÒÇ…è]ǡǃÉ^Å[ÉQÉbÉgÉtÉ@ÉCÉãÅiTeXÇ‚PageMakerǻǫÇÃÉeÉLÉXÉgÅjÇèoóÕǵNjÇ∑ÅB
  1154.  
  1155. (3) SgmlFormÇÕà¯Ç´êîǻǵÇ≈ãNìÆǵÅCǪÇÃëÄçÏÇÕì¡éÍÇ»ÉRÉ}ÉìÉhÇ≈çsǢNjÇ∑ÅB
  1156.  
  1157. (4) SgmlFormÇÕä›Å@òaçFÇ™äJî≠ǵNjǵÇΩÅBÇ®ãCÇ√Ç´ÇÃì_Ç™Ç≤ǥǢNjǵÇΩÇÁâ∫ãLÇ÷ÉÅÅ[ÉãÇÇ®ëóÇËâ∫Ç≥Ç¢ÅBSgmlFormÇñ|àƒÇ≥ÇÍÇΩèÍçáLJéQçlÇ‹Ç≈Ç…ÉÅÅ[ÉãÇÇ®ëóÇËâ∫Ç≥Ç¢ÅB
  1158.   NAG00251@niftyserve.or.jp
  1159.  
  1160. 2 SgmlFormÇÃèCê≥ãLò^
  1161.  
  1162. 2.1 ver.1.0Å`1.2
  1163.  
  1164.  åˆäJëOÇÃî≈Ç≈Ç∑ÅB
  1165.  
  1166. 2.2 ver.1.3 Åi96.8.28Åj
  1167.  
  1168.  ç≈èâÇÃåˆäJÇ≈ÇÃî≈Ç≈Ç∑ÅB
  1169.  
  1170. 2.3 ver.1.4 Åi96.10.16Åj
  1171.  
  1172.  écîOǻǙÇÁÅCDZÇÃî≈ÇÃÉ}ÉbÉvèÓïÒÇÕÅCëOÇÃî≈Ç≈çÏÇÁÇÍÇΩÉ}ÉbÉvèÓïÒÇΔå›ä∑ê´Ç™Ç»Ç≠Ç»ÇËNjǵÇΩÅBÇ≤íçà”â∫Ç≥Ç¢ÅB
  1173.  
  1174. (1) ê‡ñæï∂ÇÃàÍïîÇèCê≥ǵNjǵÇΩÅB
  1175.  
  1176. (2) É}ÉbÉvèÓïÒÇÕÉ\Å[ÉXÉtÉ@ÉCÉãÇÃï∂èëå^íËã`ÇÃÉtÉ@ÉCÉãñºÇ≈îFéØÇ∑ÇÈÇÊǧDžǵNjǵÇΩÅB
  1177.  
  1178. (3) SgmlFormÇ≈àµÇ§É^Å[ÉQÉbÉgÇΔǵǃTEXTÇí«â¡ÇµÇ‹ÇµÇΩÅB
  1179.  
  1180. (4) ëgçûÇ›ä÷êî&Value()ÇÃà¯Ç´êîÇÃå`éÆÇïœçXǵNjǵÇΩÅB
  1181.  
  1182. (5) íuä∑ï∂éöóÒÇ…Ç®ÇØÇÈëÆê´ílÇÃéQèΔÇÃå`éÆÇïœçXǵNjǵÇΩÅB
  1183.  
  1184. (6) äÙǬǩÇÃëgçûÇ›ä÷êîÇí«â¡ÇµÇ‹ÇµÇΩÅB
  1185.  
  1186. (7) äÙǬǩÇÃÉRÉ}ÉìÉhÇí«â¡ÇµÇ‹ÇµÇΩÅB
  1187.  
  1188. (8) ä¬ã´ïœêîÉtÉ@ÉCÉãÇ≈àµÇ§ïœêîÇí«â¡ÇµÇ‹ÇµÇΩÅB
  1189.  
  1190. (9) ÉwÉãÉvÉÅÉbÉZÅ[ÉWãyÇ—ÉIÉìÉâÉCÉìÉ}ÉjÉÖÉAÉãÇì˙ñ{åÍÅEâpåÍêÿÇËë÷ǶDžǵNjǵÇΩÅB
  1191.  
  1192. (10) ESISÉfÅ[É^Ç…â¸çsÅi\nÅjÇ™ä‹Ç‹ÇÍÇÈèÍçáÇ…ï™âÇ∑ÇÈÇÊǧDžǵNjǵÇΩÅBDZÇÍÇÕÉÅÉÇÉäÅ[ÇÃêflñÒÇê}ÇÈDZÇΔÇ…ÇÊǡǃïsë™ÇÃÉNÉâÉbÉVÉÖÇîÇØÇÈÇΩÇflÇ≈Ç∑ÅB
  1193.  
  1194. 3 SgmlFormÇ≈àµÇ§ÉtÉ@ÉCÉã
  1195.  
  1196. (1) SgmlFormÇÕéüÇÃägí£éqÇ≈ÉtÉ@ÉCÉãÇãÊï ÇµÇ‹Ç∑ÅB
  1197. ---------------------------------------------------------
  1198.   ÉtÉ@ÉCÉã           PageMaker  TeX   WWW    TEXT  ÇªÇÃëº
  1199. ---------------------------------------------------------
  1200.   É\Å[ÉXÉtÉ@ÉCÉã      .esi    .esi   .esi   .esi   .esi
  1201.   É}ÉbÉvèÓïÒ          .MPM    .MTX   .MWW   .MTT   îCà”
  1202.   É^Å[ÉQÉbÉgÉtÉ@ÉCÉã  .pm     .tex   .htm   .txt   îCà”
  1203.   ï∂èëå^íËã`          .DTD    .DTD   .DTD   .DTD   .DTD
  1204. ---------------------------------------------------------
  1205.  
  1206. (2) Ç±ÇÍÇÁÇÃÉtÉ@ÉCÉãÇÕìØÇ∂ÉtÉHÉãÉ_Å[ì‡Ç…Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB
  1207.  
  1208. (3) ó·Ç¶ÇŒÅCÉtÉ@ÉCÉãñºÇÕéüÇÃÇÊǧDžópǢNjÇ∑ÅB
  1209.  
  1210. (3.1) ï∂èëå^íËã`ÅgTEXTBOOK.DTDÅhÇ…äÓÇ√Ç≠ï∂èëé¿åªílÇÅgReadMeÅhÇΔǵNjÇ∑ÅBMacSgmlsÇÕÅCDZÇÃìÒǬÇì«ÇÒÇ≈ç\ï∂âêÕǵÅCESISå`éÆÇÃÉtÉ@ÉCÉãÅgReadMe.esiÅhÇèoóÕǵNjÇ∑ÅB
  1211.  
  1212. (3.2) ÅgReadMe.esiÅhÇPageMakerÇ÷É}ÉbÉsÉìÉOÇ∑ÇÈèÍçáÇÕÅCÉ}ÉbÉvèÓïÒÅgTEXTBOOK.MPMÅhÇ™ïKóvÇ≈Ç∑ÅBSgmlFormÇÕÅCÉ\Å[ÉXÉtÉ@ÉCÉãÅgReadMe.esiÅhÇì«ÇÒÇ≈ÅgTEXTBOOK.MPMÅhÇéQèΔǵǻǙÇÁÅCÉ^Å[ÉQÉbÉgÉtÉ@ÉCÉãÅgReadMe.pmÅhÇèoóÕǵNjÇ∑ÅBǪǵǃÅCDZÇÃÉfÅ[É^ÇPageMakerÇ≈ì«Ç›Ç‹Ç∑ÅB
  1213.  
  1214. (3.3) ÅgREADME.esiÅhÇTeXÇ÷É}ÉbÉsÉìÉOÇ∑ÇÈèÍçáÇÕÅCÉ}ÉbÉvèÓïÒÅgTEXTBOOK.MTXÅhÇ™ïKóvÇ≈Ç∑ÅBSgmlFormÇÕÅCÉ\Å[ÉXÉtÉ@ÉCÉãÅgREADME.esiÅhÇì«ÇÒÇ≈ÅgTEXTBOOK.MTXÅhÇéQèΔǵǻǙÇÁÅCÉ^Å[ÉQÉbÉgÉtÉ@ÉCÉãÅgREADME.texÅhÇèoóÕǵNjÇ∑ÅBǪǵǃÅCDZÇÃÉfÅ[É^ÇTeXÇ≈ì«Ç›Ç‹Ç∑ÅB
  1215.  
  1216. 4 SgmlFormÇÃëÄçÏÉRÉ}ÉìÉh
  1217.  
  1218. (1) ÉRÉ}ÉìÉhçsÇÃå`éÆ
  1219.  
  1220.   f{d}[s][m][t(c)] > ÉRÉ}ÉìÉh
  1221.  
  1222.  Ç±Ç±Ç≈ÅC
  1223. --------------------------------------
  1224.   ãLçÜ            à”ñ°
  1225. --------------------------------------
  1226.   f    É\Å[ÉXÉtÉ@ÉCÉãÇÃñºëO
  1227.   d    É\Å[ÉXÉtÉ@ÉCÉãÇÃï∂èëå^íËã`
  1228.   s    É\Å[ÉXÉtÉ@ÉCÉãÇÃägí£éq
  1229.   m    É}ÉbÉvèÓïÒÇÃägí£éq
  1230.   t    É^Å[ÉQÉbÉgÉtÉ@ÉCÉãÇÃägí£éq
  1231.   c    èoóÕÉtÉ@ÉCÉãÇÃÉNÉäÉGÅ[É^
  1232. --------------------------------------
  1233.  
  1234. (2) ÉRÉ}ÉìÉh
  1235. -----------------------------------------------------
  1236.   ãLçÜ    éwé¶ì‡óe
  1237. -----------------------------------------------------
  1238.   q       èàóùÇÃèIóπ
  1239.   l       ï\é¶çsêîÇÃê›íË
  1240.   c       ï\é¶åÖêîÇÃê›íË
  1241.   ?       ÉwÉãÉvÉÅÉbÉZÅ[ÉWÇÃï\é¶
  1242.   d       SgmlFormÉIÉìÉâÉCÉìÉ}ÉjÉÖÉAÉãÇÃï\é¶
  1243.   o       SgmlFormÉIÉìÉâÉCÉìÉ}ÉjÉÖÉAÉãÇÃï€ë∂èoóÕ
  1244.   v       Ç±ÇÃSgmlFormî≈ÇÃï\é¶
  1245.   r       ÉeÉLÉXÉgÉtÉ@ÉCÉãÇÃï\é¶
  1246.   t       ï∂èëå^íËã`ÇÃï\é¶
  1247.   s       É\Å[ÉXÉtÉ@ÉCÉãÅiESISå`éÆÅjÇÃëIë
  1248.   m       É}ÉbÉsÉìÉOÇÃëIë
  1249.   a       É^Å[ÉQÉbÉgÉtÉ@ÉCÉãÇÃÉNÉäÉGÅ[É^ÇÃëIë
  1250.   f       É\Å[ÉXÉtÉ@ÉCÉãÇ©ÇÁÉ^Å[ÉQÉbÉgÉtÉ@ÉCÉãÇ÷ÇÃïœä∑
  1251.   i       ì¸óÕǵÇΩÉeÉLÉXÉgÇÃï\é¶
  1252.   x       ïœä∑Ç≥ÇÍÇΩÉeÉLÉXÉgÇÃï\é¶
  1253.   h       ÉeÉLÉXÉgå`éÆÇ©ÇÁHTMLå`éÆÇ÷ÇÃïœä∑
  1254. -----------------------------------------------------
  1255.  
  1256. 5 SgmlFormÇÃïœä∑ÇÃédëgÇ›
  1257.  
  1258. (1) É\Å[ÉXÉtÉ@ÉCÉãÅiESISå`éÆÅjÇì¸óÕǵNjÇ∑ÅB
  1259.  
  1260. (1.1) ëÆê´ñºÇ™ÅgIDÅhÇÃèÍçáÇÕÅCêÈåæílÇ™éØï éqílÅgIDÅhÇΔǛǻÇ≥ÇÍÅCǪÇÃílÇ…àÍà”Ç»î‘çÜÇ™äÑÇËìñǃÇÁÇÍÇ‹Ç∑ÅB
  1261.  
  1262. (1.2) ëÆê´ñºÇ™ÅgREFIDÅhÇÃèÍçáÇÕÅCêÈåæílÇ™éØï éqéQèΔílÅgIDREFÅhÇΔǛǻÇ≥ÇÍÅCè„ãLÇÃílÇ…ëŒâûÇ√ÇØÇÁÇÍÇ‹Ç∑ÅB
  1263.  
  1264. (2) É\Å[ÉXÉtÉ@ÉCÉãÇÃï∂èëå^íËã`Ç©ÇÁÅCǪÇÃÉ}ÉbÉvèÓïÒÇíTǵNjÇ∑ÅB
  1265.  
  1266. (3) íuä∑èàóùÇà¯Ç´ãNDZÇ∑SGMLÉ^ÉOÇ≈džÇÍÇŒÅCÉ}ÉbÉvèÓïÒÇéQèΔǵNjÇ∑ÅB
  1267.  
  1268. (3.1) É}ÉbÉvèÓïÒÇ…PerlÇÃÉXÉNÉäÉvÉgǙdžÇÍÇŒÅCǪÇÍÇé¿çsǵNjÇ∑ÅB
  1269.  
  1270. (3.2) É}ÉbÉvèÓïÒÇ…íuä∑ï∂éöóÒǙdžÇÍÇŒÅCǪÇÃï∂éöóÒÇ…íuÇ´ä∑ǶÅCÉ^Å[ÉQÉbÉgÉtÉ@ÉCÉãÇ÷èoóÕǵNjÇ∑ÅB
  1271.  
  1272. (3.3) É}ÉbÉvèÓïÒÇ…íuä∑ï∂éöóÒǙǻÇØÇÍÇŒâΩLJǵNjÇπÇÒÅB
  1273.  
  1274. (4) ÉfÅ[É^ÇÃèÍçáÇÕÅCǪÇÃÇ‹Ç‹É^Å[ÉQÉbÉgÉtÉ@ÉCÉãÇ÷èoóÕǵNjÇ∑ÅB
  1275.  
  1276. (4.1) ÉfÅ[É^Ç…ä‹Ç‹ÇÍÇÈÅg\nÅhÇÕâ¸çsïÑçÜÇ…ïœä∑Ç≥ÇÍÇ‹Ç∑ÅB
  1277.  
  1278. (4.2) ÉfÅ[É^Ç…ä‹Ç‹ÇÍÇÈ2å¬ÇÃÅg\ÅhÇÕ1å¬ÇÃÅg\ÅhÇ…ïœä∑Ç≥ÇÍÇ‹Ç∑ÅB
  1279.  
  1280. (4.3) ëgçûÇ›ä÷êî&DefineEscape()ÇΔ&Escape()Ç≈ÉGÉXÉPÅ[Évï∂éöóÒÇ÷ÇÃïœä∑Çéwé¶Ç≈Ç´Ç‹Ç∑ÅB
  1281.  
  1282. (4.4) ëgçûÇ›ä÷êî&DefineReplace()ÇΔ&Replace()Ç≈ï ÇÃï∂éöóÒÇ÷ÇÃïœä∑Çéwé¶Ç≈Ç´Ç‹Ç∑ÅB
  1283.  
  1284. (4.5) ëgçûÇ›ä÷êî&Inhibit()Ç≈ǪÇÃèoóÕÇó}êßÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
  1285.  
  1286. (4.6) ëgçûÇ›ä÷êî&DeleteCr()Ç≈â¸çsïÑçÜÇÃèoóÕÇó}êßÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
  1287.  
  1288. 6 É}ÉbÉvèÓïÒ
  1289.  
  1290. (1) SgmlFormÇÃÉ}ÉbÉvèÓïÒÇÕï°êîÇÃçsÇ≈ï\ÇÌǵNjÇ∑ÅBÉ}ÉbÉvèÓïÒÇÃèëéÆÇÕéüÇÃÇÊǧÇ≈Ç∑ÅBäeçsÇÃêÊì™ï∂éöÇ≈èëéÆÇ™ï™Ç©ÇÍÇ‹Ç∑ÅBDZDZÇ≈ÅCÅ®ÇÕÉ^ÉuïÑçÜÇï\ÇÌǵNjÇ∑ÅB
  1291.  
  1292.   SGMLÉ^ÉOÅ®èåèéÆ
  1293.   ~Å®ÉXÉNÉäÉvÉg
  1294.   ~Å® ÅE
  1295.   ~Å® ÅE
  1296.   Å®íuä∑ï∂éöóÒ
  1297.   Å®  ÅE
  1298.   Å®  ÅE
  1299.   Å®  ÅE
  1300.  
  1301.   SGMLÉ^ÉOÅ®èåèéÆ
  1302.   ~Å®ÉXÉNÉäÉvÉg
  1303.   ~Å® ÅE
  1304.   ~Å® ÅE
  1305.   Å®íuä∑ï∂éöóÒ
  1306.   Å®  ÅE
  1307.   Å®  ÅE
  1308.   Å®  ÅE
  1309.  
  1310. (2) äeçsÇÃí∑Ç≥ÇÕîCà”Ç≈Ç∑ÅB
  1311.  
  1312. (3) SGMLÉ^ÉOÇÕÉ}ÉbÉvèÓïÒëSëÃÇ≈àÍà”ÇΔǵNjÇ∑ÅBìÒǬà»è„ÇÃSGMLÉ^ÉOÇéwíËÇ∑ÇÈèÍçáÇÕÅCèåèéÆÇÃílǙǪÇÍÇÁÇÃëgÇ›çáÇÌÇπÇÃíÜÇ≈àÍà”Ç…Ç»ÇÈÇÊǧDžǵNjÇ∑ÅB
  1313.  
  1314. 6.1 íçéfl
  1315.  
  1316. (1) èëéÆ
  1317.  
  1318.   !íçéfl
  1319.  
  1320. (2) ã@î\
  1321.  
  1322. (2.1) ÇªÇÃçsÇ™íçéflÇ≈džÇÈDZÇΔÇï\ÇÌǵNjÇ∑ÅB
  1323.  
  1324. (2.2) íçéflÇÕǫDZDždžǡǃLJǩNjǢNjÇπÇÒÅB
  1325.  
  1326. (3) ó·
  1327.  
  1328.   ! Ç±ÇÍÇÕíçéflçsÇ≈Ç∑ÅB
  1329.  
  1330. 6.2 SGMLÉ^ÉOÇΔèåèéÆ
  1331.  
  1332. (1) èëéÆ
  1333.  
  1334.   (ã§í éØï éqÅ®èåèéÆ
  1335.   )ã§í éØï éqÅ®èåèéÆ
  1336.   CÅ®èåèéÆ
  1337.  
  1338. (2) ã@î\
  1339.  
  1340. (2.1) ÇªÇÃçsÇÃÉ^ÉuÇÃç∂ë§Ç™íuä∑èàóùÇà¯Ç´ãNDZÇ∑SGMLÉ^ÉOÇï\ÇÌǵNjÇ∑ÅB
  1341. -------------------------------------------
  1342.   èëéÆ          SGMLÉ^ÉO
  1343. -------------------------------------------
  1344.   (ã§í éØï éq  ã§í éØï éqÇÃäJénÉ^ÉO
  1345.   )ã§í éØï éq  ã§í éØï éqÇÃèIóπÉ^ÉO
  1346.   C            SGMLìKçáï∂èëÇ≈džÇÈDZÇΔÇé¶Ç∑
  1347. -------------------------------------------
  1348.  
  1349. (2.2) ÇªÇÃçsÇÃÉ^ÉuÇÃâEë§Ç™èåèéÆÇï\ÇÌǵNjÇ∑ÅBèåèéÆÇÕPerlÇÃèåèéÆÇΔǵÅCǪÇÃï‘ãpílÇ™ê^ÇÃèÍçáÇ…ÇÃÇ›íuä∑èàóùÇ™à¯Ç´ãNDZÇ≥ÇÍÇ‹Ç∑ÅBèåèéÆÇéwíËǵǻǢèÍçáÇÕÅCǪÇÃSGMLÉ^ÉOÇÃèoåªéûÇ…èÌÇ…íuä∑èàóùÇ™à¯Ç´ãNDZÇ≥ÇÍÇ‹Ç∑ÅB
  1350.  
  1351. (3) ó·
  1352.  
  1353.   (LIÅ®$xlist
  1354.  
  1355.  Åg(LIÅhÇ™ì¸óÕÇ≥ÇÍÇΩéûì_Ç≈ïœêîÅg$xlistÅhÇÃílÇ™Åg1ÅhÇ≈džÇÍÇŒÅCíuä∑èàóùÇ™à¯Ç´ãNDZÇ≥ÇÍÇ‹Ç∑ÅB
  1356.  
  1357. 6.3 íuä∑ï∂éöóÒ
  1358.  
  1359. (1) èëéÆ
  1360.  
  1361.  Å®íuä∑ï∂éöóÒ
  1362.  
  1363. (2) ã@î\
  1364.  
  1365. (2.1) ÇªÇÃçsÇÃÉ^ÉuÇÃâEë§Ç™SGMLÉ^ÉOÇ…ëŒÇ∑ÇÈíuä∑ï∂éöóÒÇ≈džÇÈDZÇΔÇï\ÇÌǵNjÇ∑ÅB
  1366.  
  1367. (2.2) íuä∑ï∂éöóÒÇÕ1çsà»è„éwíËÇ≈Ç´Ç‹Ç∑ÅB
  1368.  
  1369. (2.3) íuä∑ï∂éöóÒÇÕéüÇÃï]âøÇ™Ç≥ÇÍÇΩå„ÅCèoóÕÇ≥ÇÍÇ‹Ç∑ÅB
  1370.  
  1371. (2.3.1) íuä∑ï∂éöóÒÇ…ä‹Ç‹ÇÍÇΩÅg\nÅhÇÕâ¸çsïÑçÜÇ…ïœä∑Ç≥ÇÍÇ‹Ç∑ÅB
  1372.  
  1373. (2.3.2) íuä∑ï∂éöóÒÇ…ä‹Ç‹ÇÍÇΩÅg~ëÆê´ñº~ÅhÇÕÅCåªéûì_ÇÃã§í éØï éqÇÃëÆê´ñºÇ…ëŒâûÇ∑ÇÈílÇ…ïœä∑Ç≥ÇÍÇ‹Ç∑ÅBëgçûÇ›ä÷êî&Value()Ç≈LJÅCǪÇÃílÇéQèΔÇ≈Ç´Ç‹Ç∑ÅB
  1374.  
  1375. (2.3.3) íuä∑ï∂éöóÒÇ…ä‹Ç‹ÇÍÇΩÅg~#ã§í éØï éq_ëÆê´ñº~ÅhÇÕÅCǪÇÍǺÇÍã§í éØï éqÇÃëÆê´ñºÅgIDÅhãyÇ—ÅgREFIDÅhÇÃílÇ…ïtÇØÇÁÇÍÇΩàÍà”Ç»î‘çÜÇ…ïœä∑Ç≥ÇÍÇ‹Ç∑ÅBDZÇÃã§í éØï éqÇÕÅCåªç›ÇÃã§í éØï éqÇ≈ÇÕÇ»Ç≠ÅCǪÇÃéØï éqílÇåàíËǵǃǢÇÈLJÇÃÇ≈Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅBëgçûÇ›ä÷êî&Refer()Ç≈LJÅCǪÇÃî‘çÜÇéQèΔÇ≈Ç´Ç‹Ç∑ÅB
  1376.  
  1377. (2.3.4) íuä∑ï∂éöóÒÇ…ä‹Ç‹ÇÍÇΩÅg~$ïœêîñº~ÅhÇÕǪÇÃïœêîñºÇ…ëŒâûÇ∑ÇÈPerlïœêîÇÃílÇ…ïœä∑Ç≥ÇÍÇ‹Ç∑ÅB
  1378.  
  1379. (3) ó·
  1380.  
  1381. (3.1) ëÆê´ÅgIDÅhÇÃílÇΔǪÇÃî‘çÜïtÇØ
  1382.  
  1383.  éüÇÃÇÊǧǻESISÉfÅ[É^Ç™ì¸óÕÇ≥ÇÍÇΩéûÅCã§í éØï éqÅgFNÅhÇÃëÆê´ÅgIDÅhÇÃílÅgHYPERCARDÅhÇ…Åg123ÅhÇΔǢǧî‘çÜÇ™äÑÇËìñǃÇÁÇÍÇΩÇΔǵNjÇ∑ÅB
  1384.  
  1385.   AID TOKEN HYPERCARD
  1386.   (FN
  1387.   -HyperCardÇÕÅCApple Computeré–ÇÃè§ïWÇ≈džÇÈÅB
  1388.  
  1389.  Åg(FNÅhÇ™ì¸óÕÇ≥ÇÍÇΩéûì_Ç≈ÅCéüÇÃÉ}ÉbÉvèÓïÒÇ™ì≠Ç¢ÇΩÇΔÇ∑ÇÈÇΔÅC
  1390.  
  1391.   (FN
  1392.   Å®~ID~=~#FN_ID~
  1393.  
  1394.  éüÇÃÇÊǧǻï∂éöóÒÇ™èoóÕÇ≥ÇÍÇ‹Ç∑ÅB
  1395.  
  1396.   HYPERCARD=123
  1397.  
  1398. (3.2) ëÆê´ÅgIDÅhÇÃéQèΔ
  1399.  
  1400.  éüÇÃÇÊǧǻESISÉfÅ[É^Ç™ì¸óÕÇ≥ÇÍÇΩéûÅCã§í éØï éqÅgFNÅhÇÃëÆê´ÅgIDÅhÇÃílÅgHYPERCARDÅhÇ…Åg123ÅhÇΔǢǧî‘çÜÇ™äÑÇËìñǃÇÁÇÍÇΩÇΔǵNjÇ∑ÅB
  1401.  
  1402.   -DicSGMLÇÕÅCHyperCard
  1403.   AREFID TOKEN HYPERCARD
  1404.   (FNREF
  1405.   )FNREF
  1406.   -ÇÃÉXÉ^ÉbÉNÉEÉFÉAÇ≈džÇÈÅB
  1407.  
  1408.  Åg(FNREFÅhÇ™ì¸óÕÇ≥ÇÍÇΩéûì_Ç≈ÅCéüÇÃÉ}ÉbÉvèÓïÒÇ™ì≠Ç¢ÇΩÇΔÇ∑ÇÈÇΔÅC
  1409.  
  1410.   (FNREF
  1411.   Å®~REFID~=~#FN_REFID~
  1412.  
  1413.  éüÇÃÇÊǧǻï∂éöóÒÇ™èoóÕÇ≥ÇÍÇ‹Ç∑ÅB
  1414.  
  1415.   HYPERCARD=123
  1416.  
  1417.  Ç±Ç±Ç≈ÅCíuä∑ï∂éöóÒÇÃó·Ç™Åg~#FNREF_REFID~ÅhÇ≈ÇÕǻǢDZÇΔÇ…íçà”ǵǃâ∫Ç≥Ç¢ÅBÇ»Ç∫Ç»ÇÁÅCéØï éqÇåàíËǵÇΩã§í éØï éqÇÕÅgFNREFÅhÇ≈Ç»Ç≠ÅCÅgFNÅhÇæÇ©ÇÁÇ≈Ç∑ÅB
  1418.  
  1419.  Ç±Ç±Ç≈ÇÃéQèΔÇÃédëgÇ›ÇÕéüÇÃÇÊǧDžǻÇËÇ‹Ç∑ÅBÅg~#FN_REFID~ÅhÇ…ÇÊǡǃåªç›ÇÃã§í éØï éqÅgFNREFÅhÇÃëÆê´ÅgREFIDÅhÇÃílÅgHYPERCARDÅhÇ™éQèΔÇ≥ÇÍÇ‹Ç∑ÅBéüÇ…ã§í éØï éqÅgFNÅhÇÃëÆê´ÅgIDÅhÇÃílÅgHYPERCARDÅhÇ…äÑÇËìñǃÇÁÇÍÇΩílÅg123ÅhÇ™éQèΔÇ≥ÇÍÇ‹Ç∑ÅB
  1420.  
  1421. (3.3) ëÆê´ÅgIDÅhÇÃílÇ™è»ó™ÅiIMPLIEDÅjÇ≥ÇÍǃǢÇÈèÍçá
  1422.  
  1423.  éüÇÃÇÊǧǻESISÉfÅ[É^Ç™ì¸óÕÇ≥ÇÍÇΩéûÅC
  1424.   AID IMPLIED
  1425.   (H1
  1426.   (H1T
  1427.   -MacSgmls
  1428.  
  1429.  Åg(H1ÅhÇ™ì¸óÕÇ≥ÇÍÇΩéûì_Ç≈ÅCéüÇÃÉ}ÉbÉvèÓïÒÇ™ì≠Ç¢ÇΩÇΔÇ∑ÇÈÇΔÅC
  1430.  
  1431.   (H1
  1432.   Å®~ID~=~#H1_ID~
  1433.  
  1434.  éüÇÃÇÊǧǻï∂éöóÒÇ™èoóÕÇ≥ÇÍÇ‹Ç∑ÅBǬNjÇËÅCÅg~ID~ÅhÇΔÅg~#H1_ID~ÅhÇÕÅCãÛï∂éöÅgÅhÇ…Ç»ÇËÇ‹Ç∑ÅB
  1435.  
  1436.   =
  1437.  
  1438. 6.4 ÉXÉNÉäÉvÉg
  1439.  
  1440. (1) èëéÆ
  1441.  
  1442.  ~Å®ÉXÉNÉäÉvÉg
  1443.  
  1444. (2) ã@î\
  1445.  
  1446. (2.1) ÇªÇÃçsÇÃÉ^ÉuÇÃâEë§Ç™SGMLÉ^ÉOÇ…ëŒÇ∑ÇÈíuä∑èàóùÇçsǧëOÇ…é¿çsÇ∑Ç◊Ç´PerlÇÃÉXÉNÉäÉvÉgÇï\ÇÌǵNjÇ∑ÅB
  1447.  
  1448. (2.2) 1çsíPà Ç…é¿çsǵNjÇ∑ÇÃÇ≈ÅCêßå‰ç\ë¢ÇÕçsÇï™ÇØÇÈDZÇΔÇÕÇ≈Ç´Ç‹ÇπÇÒÅB
  1449.  
  1450. (2.3) ÉXÉNÉäÉvÉgÇ≈ópÇ¢ÇÈïœêîñºÇÕÅg$xÅhÇ©ÇÁénÇflǃâ∫Ç≥Ç¢ÅBDZÇÍÇÕSgmlFormñ{ëÃÇÃïœêîñºÇΔèdï°ÇµÇ»Ç¢ÇÊǧDžÇ∑ÇÈÇΩÇflÇ≈Ç∑ÅB
  1451.  
  1452. (2.4) óòópâ¬î\Ç»ëgçûÇ›ä÷êîÇÕéüÇÃÇΔÇ®ÇËÇ≈Ç∑ÅB
  1453.  
  1454. 7 óòópâ¬î\Ç»ëgçûÇ›ä÷êî
  1455.  
  1456. 7.1 ëÆê´ñºÇ…ó^ǶÇÁÇÍÇΩílñîÇÕî‘çÜÇÃéÊìæ
  1457.  
  1458. (1) èëéÆ
  1459.  
  1460.   &Value(ëÆê´ñº)              åªéûì_ÇÃã§í éØï éqÇÃëÆê´ñºÇ…ó^ǶÇÁÇÍÇΩílÇï‘ãpǵNjÇ∑ÅB
  1461.   &Refer(ã§í éØï éq, ëÆê´ñº)  ã§í éØï éqÇÃëÆê´ñºÇ…ó^ǶÇÁÇÍÇΩílÇ…äÑÇËìñǃÇÁÇÍÇΩî‘çÜÇï‘ãpǵNjÇ∑ÅB
  1462.  
  1463. (2) ã@î\
  1464.  
  1465. (2.1) &Value()ÇÕÅg~ëÆê´ñº~ÅhÇΔìØÇ∂ÇÊǧDžì≠Ç´Ç‹Ç∑ÅB&Refer()ÇÕÅg~#ã§í éØï éq_ëÆê´ñº~ÅhÇΔìØÇ∂ÇÊǧDžì≠Ç´Ç‹Ç∑ÅBè]ǡǃÅC&Refer()Ç…Ç®ÇØÇÈëÆê´ñºÇÕÅCÅgIDÅhñîÇÕÅgREFIDÅhÇ≈Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB
  1466.  
  1467. (2.2) ëÆê´ñºÇ…ó^ǶÇÁÇÍÇΩílǙǻǢÅiIMPLIEDÅjèÍçáÇÕÅCDZÇÍÇÁÇÃëgçûÇ›ä÷êîÇÕñ¢íËã`ílÇï‘ãpǵNjÇ∑ÅB
  1468.  
  1469. (2.3) ESISÉfÅ[É^Ç≈ÇÕëÆê´ÇÕäJénÉ^ÉOÇÃíºëOÇ…èoåªÇµÇ‹Ç∑Ç™ÅCDZÇÍÇÁÇÃëgçûÇ›ä÷êîÇÕäJénÉ^ÉOÅCèIóπÉ^ÉOÇÃÇ¢Ç∏ÇÍÇ©Ç≈éQèΔǵǃLJǩNjǢNjÇπÇÒÅB
  1470.  
  1471. (2.4) ESISÉfÅ[É^è„Ç≈SGMLÉ^ÉOÇ™ì¸ÇÍéqç\ë¢Ç…ǻǡǃǢÇÈèÍçáÅCDZÇÍÇÁÇÃëgçûÇ›ä÷êîÇÕèIóπÉ^ÉOÇ…ëŒâûÇ∑ÇÈäJénÉ^ÉOÇÃëÆê´ÇéQèΔǵNjÇ∑ÅB
  1472.  
  1473. (3) ó·
  1474.  
  1475.   (FIG
  1476.   ~Å®$xfigid = &Value('ID') ;
  1477.  
  1478.  Ç±ÇÃÉXÉNÉäÉvÉgÇÕåªéûì_ÇÃã§í éØï éqÅgFIGÅhÇÃëÆê´ñºÅgIDÅhÇÃílÇDZÇÍà»ç~ÇÃÉ^ÉOÇ≈éQèΔÇ∑ÇÈÇΩÇflÇ…ïœêîÅg$xfigidÅhÇ÷ë„ì¸ÇµÇƒÇ¢Ç‹Ç∑ÅB
  1479.  
  1480. 7.2 íºë±ÇÃã§í éØï éqÇ…ëŒâûÇ∑ÇÈÉfÅ[É^ÇÃälìæÇÃéwé¶ÇΔÉfÅ[É^ÇÃéÊìæ
  1481.  
  1482. (1) èëéÆ
  1483.  
  1484.   &Hook(ã§í éØï éq)         íºë±ÇÃã§í éØï éqÇ…ëŒâûÇ∑ÇÈÉfÅ[É^ÇälìæÇéwé¶ÇµÇ‹Ç∑ÅB
  1485.   &Data(ã§í éØï éq)         &Hook()Ç™älìæǵÇΩÉfÅ[É^Çï‘ãpǵNjÇ∑ÅB
  1486.  
  1487. (2) ã@î\
  1488.  
  1489. (2.1) &Data()ÇΔ&Hook()ÇÃã§í éØï éqÇÕìØÇ∂LJÇÃÇéwíËǵNjÇ∑ÅB
  1490.  
  1491. (2.2) Ç±ÇÃÉfÅ[É^ÇÕàÍíUéQèΔÇ∑ÇÈÇΔè¡ãéÇ≥ÇÍÇ‹Ç∑ÅB
  1492.  
  1493. (3) ó·
  1494.  
  1495.   (TLINE
  1496.   ~Å®&Hook('TLINE') ;
  1497.     .
  1498.     .
  1499.  
  1500.   (ǪÇÃëº
  1501.   ~Å®$xtline = &Data('TLINE') ;
  1502.  
  1503.  TLINEÇÃäJénÉ^ÉODžǮǢǃÅC&Hook()Ç…ÇÊÇÈTLINEÉ^ÉOÇÃÉfÅ[É^älìæÇéwé¶ÇµÇ‹Ç∑ÅBTLINEÉ^ÉOÇÃÉfÅ[É^Ç™ì¸óÕÇ≥ÇÍÇΩéûì_Ç≈älìæÇ≥ÇÍÇ‹Ç∑ÅBï ÇÃÉ^ÉODžǮǢǃÅC&Data()Ç≈ǪÇÃÉfÅ[É^ÇéQèΔǵÅCïœêî$xtlineÇ÷ë„ì¸ÇµÇ‹Ç∑ÅBDZÇÃë„ì¸Ç™çsÇÌÇÍÇΩå„ÅCǪÇÃÉfÅ[É^ÇÕè¡ãéÇ≥ÇÍÇ‹Ç∑ÅB
  1504.  
  1505. 7.3 ã§í éØï éqÇ…ëŒâûÇ∑ÇÈíºë±ÇÃÉfÅ[É^ÇÃèoóÕó}êß
  1506.  
  1507. (1) èëéÆ
  1508.  
  1509.   &Inhibit(ã§í éØï éq)
  1510.  
  1511. (2) ã@î\
  1512.  
  1513. (2.1) ã§í éØï éqÇ…ëŒâûÇ∑ÇÈíºë±ÇÃÉfÅ[É^ÇÃèoóÕÇó}êßǵNjÇ∑ÅB
  1514.  
  1515. (2.2) Ç±ÇÃï‘ãpílÇÕdžÇËÇ‹ÇπÇÒÅB
  1516.  
  1517. 7.4 íuä∑ï∂éöóÒÇÃéÊìæ
  1518.  
  1519. (1) èëéÆ
  1520.  
  1521.   &Convert(íuä∑ï∂éöóÒ)
  1522.  
  1523. (2) ã@î\
  1524.  
  1525. (2.1) Ç±ÇÃï‘ãpílÇÕÅCíuä∑ï∂éöóÒÇï]âøǵÇΩåãâ Ç≈Ç∑ÅB
  1526.  
  1527. 7.5 ï∂éöóÒïœä∑ÇÃéwé¶
  1528.  
  1529. (1) èëéÆ
  1530.  
  1531.   &DefineReplace(ÉfÅ[É^ï∂éöóÒ, íuä∑ÉfÅ[É^ï∂éöóÒ)  ï ÇÃÉfÅ[É^ï∂éöóÒÇ÷ïœä∑Ç∑ÇÈï∂éöóÒÇíËã`ǵNjÇ∑ÅB
  1532.   &DefineEscape(ÉfÅ[É^ï∂éö, ÉGÉXÉPÅ[Évï∂éöóÒ)     ÉGÉXÉPÅ[Évï∂éöóÒÇ…ïœä∑Ç∑ÇÈï∂éöÇíËã`ǵNjÇ∑ÅB
  1533.   &Replace(ÉXÉCÉbÉ`)                              ï ÇÃÉfÅ[É^ï∂éöóÒÇ÷ïœä∑Ç∑ÇÈÅiÉXÉCÉbÉ`Ç™Åg1ÅhÅjÇ©ÅCïœä∑ǵǻǢÅiÉXÉCÉbÉ`Ç™Åg0ÅhÅjÇ©Çéwé¶ÇµÇ‹Ç∑ÅB
  1534.   &Escape(ÉXÉCÉbÉ`)                               ÉGÉXÉPÅ[Évï∂éöóÒÇ…ïœä∑Ç∑ÇÈÅiÉXÉCÉbÉ`Ç™Åg1ÅhÅjÇ©ÅCïœä∑ǵǻǢÅiÉXÉCÉbÉ`Ç™Åg0ÅhÅjÇ©Çéwé¶ÇµÇ‹Ç∑ÅB
  1535.   &DeleteCr(ÉXÉCÉbÉ`)                             â¸çsïÑçÜÅi\nÅjÇÇ∑Ç◊ǃçÌèúÇ∑ÇÈÅiÉXÉCÉbÉ`Ç™Åg1ÅhÅjÇ©ÅCçÌèúǵǻǢÅiÉXÉCÉbÉ`Ç™Åg0ÅhÅjÇ©Çéwé¶ÇµÇ‹Ç∑ÅB
  1536.  
  1537. (2) ã@î\
  1538.  
  1539. (2.1) Ç±ÇÍÇÁÇÃëgçûÇ›ä÷êîÇÕÅCÉfÅ[É^ÇÃèoóÕéûÇ…ÉfÅ[É^Ç…ä‹Ç‹ÇÍÇÈï∂éöóÒÇï ÇÃï∂éöóÒÇ÷íuä∑Ç∑ÇÈDZÇΔÇéwé¶ÇµÇ‹Ç∑ÅB
  1540.  
  1541. (2.2) ÉfÅ[É^èoóÕéûÇÃèàóùÇÕÅC8êiêîï\ãLÇÃïœä∑ÅC&DeleteCr()Ç≈éwé¶ÇµÇΩâ¸çsïÑçÜÅi\nÅjÇÃçÌèúÅC&DefineEscape()ÇΔ&Escape()Ç≈éwíËǵÇΩíuä∑ÅC&DefineReplace()ÇΔ&Replace()Ç≈éwíËǵÇΩíuä∑ÇÃèáÇ…çsÇÌÇÍÇ‹Ç∑ÅB
  1542.  
  1543. (3) ó·
  1544.  
  1545.   ~Å®&DeleteCr(1) ;
  1546.   ~Å®&DefineEscape('<','<') ;
  1547.   ~Å®&DefineEscape('>','>') ;
  1548.   ~Å®&DefineEscape('&','&') ;
  1549.   ~Å®&Escape(1) ;
  1550.  
  1551. 7.6 âÊëúê°ñ@ÇÃéÊìæ
  1552.  
  1553. (1) èëéÆ
  1554.  
  1555.   &GraphicSize(âÊëúÉtÉ@ÉCÉãñº, å`éÆ)
  1556.  
  1557. (2) ã@î\
  1558.  
  1559. (2.1) Ç±ÇÃï‘ãpílÇÕÅCâÊëúÉtÉ@ÉCÉãñºÇΔå`éÆÇ≈éwíËÇ≥ÇÍÇΩâÊëúÇÃê°ñ@ÅiïùÅCçÇÇ≥ÅjÇ≈Ç∑ÅBÉAÉåÉCïœêîÇ≈éÛÇØéÊÇËÇ‹Ç∑ÅB
  1560.  
  1561. (2.2) ÉtÉ@ÉCÉãå`éÆÇÃéÌófiÇÕéüÇÃÇΔÇ®ÇËÇ≈Ç∑ÅB
  1562.  
  1563. ---------------------------------
  1564.   å`éÆ    ÉtÉ@ÉCÉãÇÃéÌófi
  1565. ---------------------------------
  1566.   ps      ASCIIï\åªÇÃEPSÉtÉ@ÉCÉã
  1567.   pict    PICTÉtÉ@ÉCÉã
  1568. ---------------------------------
  1569.  
  1570. (3) ó·
  1571.  
  1572.   ~Å®$xfname = &Convert('~$xpath~~FILE~.~$xgraphic~') ;
  1573.   ~Å®($xwidth, $xheight) = &GraphicSize($gr, $xgraphic) ;
  1574.  
  1575.  Ç±ÇÃÉXÉNÉäÉvÉgÇÕâÊëúÇÃïùÇïœêîÅg$xwidthÅhÇ÷çÇÇ≥ÇïœêîÅg$xheightÅhÇ÷ë„ì¸ÇµÇƒÇ¢Ç‹Ç∑ÅBÉtÉ@ÉCÉãñºÇÕÅg~$xpath~~FILE~.~$xgraphic~ÅhÇ≈éwé¶Ç≥ÇÍÅC$xpathÇ™ÅgMyDisk:GraphicData:ÅhÅCFILEëÆê´ílÇ™ÅgDialogSampleÅhÅCïœêîÅg$xgraphicÅhÇÃílÇ™ÅgpictÅhÇ»ÇÁÇŒÅCÅgMyDisk:GraphicData:DialogSample.pictÅhÇΔÇ»ÇËÇ‹Ç∑ÅB
  1576.  
  1577. 7.7 ç\ë¢ëÃÇÃêßå‰
  1578.  
  1579. (1) èëéÆ
  1580.  
  1581.   &Begin(ç\ë¢ëÃñº)          ç\ë¢ëÃÇÃäJénÇéwé¶ÇµÇ‹Ç∑ÅB
  1582.   &End(ç\ë¢ëÃñº)            ç\ë¢ëÃÇÃèIóπÇéwé¶ÇµÇ‹Ç∑ÅB
  1583.   &Level(ç\ë¢ëÃñº)          ç\ë¢ëÃÇÃì¸ÇÍéqÇÃê[Ç≥Çï‘ãpǵNjÇ∑ÅB
  1584.   &Nest(ç\ë¢ëÃñº)           ì¸ÇÍéqï\åªÇÃç\ë¢ëÃî‘çÜÇï‘ãpǵNjÇ∑ÅB
  1585.   &Number(ç\ë¢ëÃñº)         í[ññï\åªÇÃç\ë¢ëÃî‘çÜÇï‘ãpǵNjÇ∑ÅB
  1586.   &Count(ç\ë¢ëÃñº)          ç\ë¢ëÃî‘çÜïtÇØÇéwé¶ÇµÇ‹Ç∑ÅB
  1587.  
  1588. (2) ã@î\
  1589.  
  1590. (2.1) Ç±ÇÍÇÁÇÃä÷êîÇÕÅCç\ë¢ëÃÇÃêßå‰ÇçsǢNjÇ∑ÅBêßå‰Ç∑ÇÈç\ë¢ëÃÇÕÅCç\ë¢ëÃñºÇ≈éØï Ç≥ÇÍÇ‹Ç∑ÅB
  1591.  
  1592. (2.2) ç\ë¢ëÃÇΔÇÕÅCèÕêflÇ‚â”èèëÇÃÇÊǧǻï∂èÕÇ≈ÅCäJénÇΔèIóπÇÃÉ^ÉOÇ™ñæé¶Ç≥ÇÍÅCì¸ÇÍéqÇ…Ç»ÇËǧÇÈç\ë¢ÇéùÇ¡ÇΩLJÇÃÇ≈Ç∑ÅB
  1593.  
  1594. (2.3) ç\ë¢ëÃÇÃì¸ÇÍéqÇÃê[Ç≥ÇÕ1Ç©ÇÁénÇ‹ÇÈàÍòAî‘çÜÇ≈ÅCç≈LJêÛÇ¢ÉåÉxÉãÇÕ1Ç≈ÅCǪÇÍà»è„ÇÃê[Ç≥Ç…Ç»ÇÈÇΩÇ—Ç…1Ç√ǬëùǶNjÇ∑ÅB
  1595.  
  1596. (2.4) ç\ë¢ëÃî‘çÜÇ…ÇÕÅCéüÇÃìÒǬÇÃï\åªå`éÆǙdžÇËÇ‹Ç∑ÅB
  1597.  
  1598. (2.4.1) ì¸ÇÍéqï\åªÇÃç\ë¢ëÃî‘çÜÇÕÅCÅg1ÅhÅCÅg1.1ÅhÅCÅg1.1.1ÅhÅC...Ç©ÇÁénÇ‹ÇËÅCì¸ÇÍéqÇ≤ÇΔÇ…Åg2ÅhÅCÅg1.2ÅhÅCÅg1.1.2ÅhÅC...ÅCÇÃÇÊǧDž1Ç√ǬëùǶNjÇ∑ÅB
  1599.  
  1600. (2.4.2) í[ññï\åªÇÃç\ë¢ëÃî‘çÜÇÕÅCì¸ÇÍéqï\åªÇÃç\ë¢ëÃî‘çÜÇÃç≈âEí[ÇÃî‘çÜÇ≈Ç∑ÅB
  1601.  
  1602. (3) ó·
  1603.  
  1604.  éüÇÃÉXÉNÉäÉvÉgÇÕâ”èèëÇÃî‘çÜïtÇØÇΔéöâ∫Ç∞ÇçsǢNjÇ∑ÅBÅgLIÅhÇÕâ”èèëÇéØï Ç∑ÇÈÇΩÇflÇÃç\ë¢ëÃñºÇ≈Ç∑ÅBì¸ÇÍéqÇÃÉåÉxÉãÇ™1ÇÃèÍçáÅCî‘çÜÇÕÅg(1)ÅhÅCÅg(2)ÅhÅCÅg(3)ÅhÅC...ÇΔÇ»ÇËÇ‹Ç∑ÅB2à»è„ÇÃèÍçáÅCî‘çÜÇÕÅg(1.1)ÅhÅCÅg(1.2)ÅhÅCÅg(1.3)ÅhÅC...ÅCÅg(2.1)ÅhÅCÅg(2.2)ÅhÅC...ÇÃÇÊǧDžǻÇËÇ‹Ç∑ÅBÇ‹ÇΩÅCÉåÉxÉãÇ™àÍǬâ∫Ç™ÇÈìxÇ…1éöÇ√Ǭéöâ∫Ç∞Ç≥ÇÍÇ‹Ç∑ÅB
  1605.  
  1606.   (LI
  1607.   ~Å®&Begin('LI') ;
  1608.   (IT
  1609.   ~Å®&Count('LI') ;
  1610.   ~Å®$xlleft = ' ' x &Level('LI') ;
  1611.   ~Å®$xlnest = &Nest('LI') ;
  1612.   Å®\n~$xlleft~(~$xlnest~) 
  1613.   )LI
  1614.   ~Å®&End('LI') ;
  1615.   ~Å®$xlleft = ' ' x &Level('LI') ;
  1616.  
  1617. 7.8 ï∂éöóÒÇÃï\é¶
  1618.  
  1619. (1) èëéÆ
  1620.  
  1621.   &Display(ï∂éöóÒ)
  1622.  
  1623. (2) ã@î\
  1624.  
  1625. (2.1) ï∂éöóÒÇï\é¶ÇµÇ‹Ç∑ÅBï∂éöóÒÇÕÉRÉ}ÉìÉhÅglÅhÇΔÅgcÅhÇ≈ê›íËÇ≥ÇÍÇΩçsêîÇΔåÖêîÇ…è]ǡǃï\é¶Ç≥ÇÍÇ‹Ç∑ÅB
  1626.  
  1627. (2.2) Ç±ÇÍÇÕéÂÇ…É}ÉbÉvèÓïÒÇÃÉfÉoÉbÉOÇ…ópǢNjÇ∑ÅB
  1628.  
  1629. 8 ÉeÉLÉXÉgå`éÆÇ©ÇÁHTMLå`éÆÇ÷ÇÃïœä∑
  1630.  
  1631. (1) éüÇÃç∂ë§ÇÃÇÊǧDžèëÇ©ÇÍÇΩÉeÉLÉXÉgÇâEë§ÇÃÇÊǧǻHTMLå`éÆÇÃÉeÉLÉXÉgÇ÷ïœä∑Ç≈Ç´Ç‹Ç∑ÅB
  1632.  
  1633.                                    <HTML>
  1634.                                    <HEAD>
  1635.   # ÉRÉìíéïSâ»                     <TITLE>ÉRÉìíéïSâ»</TITLE>
  1636.                                    </HEAD>
  1637.                                    <BODY>
  1638.   1 ÉRÉìíéÇΔÇÕÅH                   <H1>ÉRÉìíéÇΔÇÕÅH</H1>
  1639.    ÉRÉìíéÇÕÅuç©íéÅvÇ≈ÇÕÇ»Ç≠ÅC...   <P>ÉRÉìíéÇÕÅuç©íéÅvÇ≈ÇÕÇ»Ç≠ÅC...
  1640.     •
  1641.     •
  1642.   2 ÉRÉìíéÇÃå`ë‘äwìIçlé@           <H1>ÉRÉìíéÇÃå`ë‘äwìIçlé@</H1>
  1643.    ÉRÉìíéÇÃå`ë‘ÇÕïsâ¬éãljǶDž...   <P>ÉRÉìíéÇÃå`ë‘ÇÕïsâ¬éãljǶDž...
  1644.     •
  1645.   -------------------------        <TABLE BORDER=1>
  1646.     èKê´    ÉRÉìíé                 <TR><TH></TH><TH></TH></TR>
  1647.   -------------------------
  1648.     äÒê∂é  ÉvÉçÉOÉâÉÄ             <TR><TD>ÉjÉbÉ`</TD><TD>ÉvÉçÉOÉâÉÄì‡</TD></TR>
  1649.     ëùêB    ãHÇ…ëùêBÇ∑ÇÈ           <TR><TD>ëùêB</TD><TD>ãHÇ…ëùêBÇ∑ÇÈ</TD></TR>
  1650.     çsìÆ    ÉEÉCÉãÉXÇ…ófiéó         <TR><TD>çsìÆ</TD><TD>ÉEÉCÉãÉXÇ…ófiéó</TD></TR>
  1651.     •
  1652.   -------------------------------- </TABLE>
  1653.   2.1 ÉRÉìíéÇÃãNåπ                 <H2>ÉRÉìíéÇÃãNåπ</H2>
  1654.    ÉRÉìíéÇÃãNåπÇÕ1940îNë„Ç…...     <P>ÉRÉìíéÇÃãNåπÇÕ1940îNë„Ç…...
  1655.     •
  1656.     •
  1657.   2.2 ÉRÉìíéÇÃêiâªò_               <H2>ÉRÉìíéÇÃêiâªò_</H2>
  1658.    åªç›Ç≈ÇÕéüÇÃÇÊǧǻêiâªò_...     <P>åªç›Ç≈ÇÕéüÇÃÇÊǧǻêiâªò_...
  1659.     •
  1660.                                    <OL>
  1661.   (1) î≠ê∂ä˙                       <LI>î≠ê∂ä˙
  1662.   (2) å¥èâìIï™âª                   <LI>å¥èâìIï™âª
  1663.                                    <OL>
  1664.   (2.1) ÉoÉOÇÃëcå`                 <LI>ÉoÉOÇÃëcå`
  1665.   (2.2) ÉEÉCÉãÉXÇÃëcå`             <LI>ÉEÉCÉãÉXÇÃëcå`
  1666.                                    </OL>
  1667.   (3) ìëëøà≥Ç…ÇÊÇÈï™âª             <LI>ìëëøà≥Ç…ÇÊÇÈï™âª
  1668.     •
  1669.                                    </OL>
  1670.     •
  1671.     •
  1672.                                    </BODY>
  1673.                                    </HTML>
  1674.  
  1675. (2) èëéÆÇÃà”ñ°ÇÕéüÇÃÇΔÇ®ÇËÇ≈Ç∑ÅBDZDZÇ≈ÅCÅgdÅhÇÕêîéöóÒÅCÅgbÅhÇÕãÛîí1éöÅCÅgX•••ÅhÇÕÅgXÅhÇ™åJÇËï‘ǵâ¬î\ÅCÅg[X]ÅhÇÕÅgXÅhÇ™è»ó™â¬î\Ç≈džÇÈDZÇΔÇǪÇÍǺÇÍï\ÇÌǵNjÇ∑ÅB
  1676.  
  1677. (2.1) ÉtÉ@ÉCÉãñºãyÇ—ï\ëË
  1678.  
  1679.   # ï∂éöóÒ
  1680.  
  1681.  Ç±ÇÃãLèqÇÕéüÇÃÇÊǧDžïœä∑Ç≥ÇÍÇ‹Ç∑ÅB
  1682.  
  1683.   <TITLE>ï∂éöóÒ</TITLE>
  1684.  
  1685. (2.2) å©èoǵ
  1686.  
  1687.   d[.d[.d]] b••• ï∂éöóÒ
  1688.  
  1689.  Ç±ÇÃãLèqÇÕéüÇÃÇÊǧDžïœä∑Ç≥ÇÍÇ‹Ç∑ÅB
  1690.  
  1691.   <Hn>ï∂éöóÒ</Hn>
  1692.  
  1693.  Ç±Ç±Ç≈ÅCÅgnÅhÇÕÅgdÅhÇÃå¬êîÅiǬNjÇËÅCÉåÉxÉãÇÃê[Ç≥ÅjÇ…Ç»ÇËÇ‹Ç∑ÅB
  1694.  
  1695. (2.3) íióé
  1696.  
  1697.   b ï∂éöóÒ
  1698.  
  1699.  Ç±ÇÃãLèqÇÕéüÇÃÇÊǧDžïœä∑Ç≥ÇÍÇ‹Ç∑ÅB
  1700.  
  1701.   <P>ï∂éöóÒ
  1702.  
  1703. (2.4) äÑïtÇØçœÇ›ï∂éöóÒ
  1704.  
  1705.   bb••• ï∂éöóÒ
  1706.  
  1707.  Ç±ÇÃãLèqÇÕéüÇÃÇÊǧDžïœä∑Ç≥ÇÍÇ‹Ç∑ÅB
  1708.  
  1709.   <PRE>
  1710.   <LI>ï∂éöóÒ
  1711.     •
  1712.     •
  1713.   </PRE>
  1714.  
  1715. (2.5) î‘çÜïtÇ´ÉäÉXÉgçÄñ⁄
  1716.  
  1717.   (d[.d[.d]]) b••• ï∂éöóÒ
  1718.  
  1719.  Ç±ÇÃãLèqÇÕéüÇÃÇÊǧDžïœä∑Ç≥ÇÍÇ‹Ç∑ÅBÅgdÅhÇÃå¬êîÅiǬNjÇËÅCÉåÉxÉãÇÃê[Ç≥ÅjÇ…âûÇ∂ǃì¸ÇÍéqÇÃå`ÇÇΔÇËÇ‹Ç∑ÅB
  1720.  
  1721.   <OL>
  1722.   <LI>ï∂éöóÒ
  1723.     •
  1724.   <OL>
  1725.   <LI>ï∂éöóÒ
  1726.     •
  1727.   </OL>
  1728.   <LI>ï∂éöóÒ
  1729.     •
  1730.   </OL>
  1731.  
  1732. (2.6) ï\
  1733.  
  1734. (2.6.1) ï\ÇÕÅCÉnÉCÉtÉìçsÇ…ÇÊǡǃì™èëÇ´ÇΔñæç◊Ç…ï™Ç©ÇÍÇ‹Ç∑ÅB
  1735.  
  1736.   ---------------------------
  1737.   bb••• ì™èëÇ´
  1738.   ---------------------------
  1739.   bb••• ñæç◊
  1740.     •
  1741.     •
  1742.   ---------------------------
  1743.  
  1744.  Ç±ÇÃãLèqÇÕéüÇÃÇÊǧDžïœä∑Ç≥ÇÍÇ‹Ç∑ÅB
  1745.  
  1746.   <TABLE BORDER=1>
  1747.   ïœä∑Ç≥ÇÍÇΩì™èëÇ´
  1748.   ïœä∑Ç≥ÇÍÇΩñæç◊
  1749.     •
  1750.     •
  1751.   </TABLE>
  1752.  
  1753. (2.6.2) ì™èëÇ´
  1754.  
  1755.   bb••• ï∂éöóÒ1 [bb••• ï∂éöóÒ2 ]•••
  1756.  
  1757.  ì™èëÇ´ÇÃãLèqÇÕéüÇÃÇÊǧDžïœä∑Ç≥ÇÍÇ‹Ç∑ÅB
  1758.  
  1759.   <TR><TH>ï∂éöóÒ1</TH><TH>ï∂éöóÒ2</TH>•••</TR>
  1760.  
  1761. (2.6.2) ñæç◊
  1762.  
  1763.  ñæç◊ÇÃãLèqÇÕéüÇÃÇÊǧDžïœä∑Ç≥ÇÍÇ‹Ç∑ÅB
  1764.  
  1765.   <TR><TD>ï∂éöóÒ1</TD><TD>ï∂éöóÒ2</TD>•••</TR>
  1766.  
  1767. (2.7) âÊëúÉfÅ[É^ñºÇΔë„ë÷ê‡ñæ
  1768.  
  1769.   * b•• ï∂éöóÒ1 [ b•• ï∂éöóÒ2 ]
  1770.  
  1771.  Ç±ÇÃãLèqÇÕéüÇÃÇÊǧDžïœä∑Ç≥ÇÍÇ‹Ç∑ÅB
  1772.  
  1773.   <IMG SRC="ï∂éöóÒ1" [ ALT="ï∂éöóÒ2 ]">
  1774.  
  1775. 9 ä¬ã´ïœêîÉtÉ@ÉCÉã
  1776.  
  1777. !!
  1778. !E
  1779. # AboutSgmlForm
  1780.  
  1781. 1 SgmlForm
  1782. * SgmlForm.gif
  1783.  
  1784. (1) SgmlForm is FREE software. I grant to any user an royalty-free, worldwide, non-exclusive license to use, execute, reproduce, display, perform and distribute copies of SgmlForm. I do not warrant the result that issued from running SgmlForm.
  1785.  
  1786. (2) SgmlForm inputs the source-file(ESIS-formatted) that is generated by SGML-parser `MacSgmls', and outputs the target-file(text-file for TeX or PageMaker) while referring to the map-info.
  1787.  
  1788. (3) SgmlForm is launched with no argument and operated by special commands.
  1789.  
  1790. (4) SgmlsForm was developed by KISI,KAZUTAKA. Write me when you detected any error. Also write me when you adapted to new version.
  1791.   e-mail : NAG00251@niftyserve.or.jp
  1792.  
  1793. 2 Bug Report of SgmlForm
  1794.  
  1795. 2.1 ver.1.0 to 1.2
  1796.  
  1797.  before open
  1798.  
  1799. 2.2 ver.1.3  (96.8.28)
  1800.  
  1801.  first open to public
  1802.  
  1803. 2.3 ver.1.4  (96.9.20)
  1804.  
  1805.  I am sorry that the map-info in this version is not compatible with it in previous version.
  1806.  
  1807. (1) The messages were corrected.
  1808.  
  1809. (2) The map-info-file distinguishes by the DTD that is included in the source-file.
  1810.  
  1811. (3) The TEXT as the file extension was added.
  1812.  
  1813. (4) The arguments format of build-in function &Value() was altered.
  1814.  
  1815. (5) The reference format in replacing-string was altered.
  1816.  
  1817. (6) Several build-in functions were added.
  1818.  
  1819. (7) Several commands were added.
  1820.  
  1821. (8) The environment variable was added.
  1822.  
  1823. (9) The help message and online manual can be changed to either Japanese or English.
  1824.  
  1825. (10) A line is divided into each part by CR. It may be possible to escape an expected crash for the memory saving.
  1826.  
  1827. 3 Files in SgmlForm
  1828.  
  1829. (1) SgmlForm distinguishes each related files by the following file extension.
  1830. -----------------------------------------------------
  1831.   File          PageMaker  TeX   WWW    TEXT  Others
  1832. -----------------------------------------------------
  1833.   source-file     .esi    .esi   .esi   .esi   .esi
  1834.   map-info-file   .MPM    .MTX   .MWW   .MTT    any
  1835.   target-file     .pm     .tex   .htm   .txt    any
  1836.   DTD             .DTD    .DTD   .DTD   .DTD   .DTD
  1837. -----------------------------------------------------
  1838.  
  1839. (2) These files must exist in the same folder.
  1840.  
  1841. (3) For example, use the filename as follows ;
  1842.  
  1843. (3.1) Let us suppose the document instance is `ReadMe' that is based on the document-type-definition `TEXTBOOK.DTD'. MacSgmls will read both files, and will output the file `ReadMe.esi'.
  1844.  
  1845. (3.2) Make up the map-info-file `TEXTBOOK.MPM' if you map the `ReadMe.esi' onto the PageMaker. MacSgmls will read the `ReadMe.esi' while referring to the `TEXTBOOK.MPM', and will output the target-file `ReadMe.pm'. Finally, the PageMaker will read the `ReadMe.pm'.
  1846.  
  1847. (3.3) Make up the map-info-file `TEXTBOOK.MTX' if you map the `ReadMe.esi' onto the TeX. MacSgmls will read the `ReadMe.esi' while referring to the `TEXTBOOK.MTX', and will output the target-file `ReadMe.tex'. Finally, the TeX will read the `ReadMe.tex'.
  1848.  
  1849. 4 Commands of SgmlForm
  1850.  
  1851. (1) The format of command line :
  1852.  
  1853.   f{d}[s][m][t(c)] > command
  1854.  
  1855.  Where,
  1856. ----------------------------------------
  1857.   Symbol   Meaning
  1858. ----------------------------------------
  1859.   f  the filename of source-file
  1860.   d  the filename of DTD-file
  1861.   s  the file extension of source-file
  1862.   m  the file extension of map-info-file
  1863.   t  the file extension of target-file
  1864.   c  the file creator of output-file
  1865. ----------------------------------------
  1866.  
  1867. (2) Command :
  1868. ----------------------------------------------
  1869.   Symbol  Command
  1870. ----------------------------------------------
  1871.   q  quit
  1872.   l  set the number of lines displayed
  1873.   c  the number of columns displayed
  1874.   ?  display the help message
  1875.   d  display the online manual
  1876.   o  save the online manual
  1877.   v  display the version of SgmlForm
  1878.   r  review the text file
  1879.   t  display the document type definition
  1880.   s  select the source-file(ESIS-format)
  1881.   m  select the mapping
  1882.   a  select the file creator of target-file
  1883.   f  form to the target from the source
  1884.   i  display the input text
  1885.   x  display the converted text
  1886.   h  Convert to HTML-format from the text-format
  1887. ----------------------------------------------
  1888.  
  1889. 5 Changing by SgmlForm
  1890.  
  1891. (1) SgmlForm reads the source file.
  1892.  
  1893. (1.1) The declared value is regarded as the ID value when the attribute name is `ID'. This attribute value is assigned an unique number.
  1894.  
  1895. (1.2) The declared value is regarded as the ID reference value when the attribute name is `REFID'. This attribute value is associated with an ID value.
  1896.  
  1897. (2) SgmlForm finds out the DTD that is described in the source-file, and finds out the map-info-file.
  1898.  
  1899. (3) SgmlForm refers to the map-info-file if the SGML-tag requests to replace.
  1900.  
  1901. (3.1) If the map-info includes the Perl-script SgmlForm performs it.
  1902.  
  1903. (3.2) If the map-info includes the replacing-string SgmlForm replaces it, and outputs the target-file.
  1904.  
  1905. (3.3) If the map-info includes no replacing-string SgmlForm do nothing.
  1906.  
  1907. (4) If the source is data SgmlForm outputs it.
  1908.  
  1909. (4.1) If data includes `\n' it is converted to a record-end-character.
  1910.  
  1911. (4.2) If data includes two `\' it is converted to one `\'.
  1912.  
  1913. (4.3) The output of a particular special characters that have to convert an escape characters can be defined using the built-in function &DefineEscape() and &Escape().
  1914.  
  1915. (4.4) The output of a particular characters that have to convert another characters can be defined using the built-in function &DefineReplace() and &Replace().
  1916.  
  1917. (4.5) The output can be suppressed using the build-in function &Inhibit().
  1918.  
  1919. (4.6) The output of record-end-character can be suppressed using the build-in function &DeleteCr().
  1920.  
  1921. 6 Map-Info
  1922.  
  1923. (1) The map-info of SgmlForm is a series of lines. The an initial character of a line decides the format. Where, `->' means TAB-code.
  1924.  
  1925.   SGML-tag->condition-expression
  1926.   ~->script
  1927.   ~->  •
  1928.   ~->  •
  1929.   ->replacing-string
  1930.   ->  •
  1931.   ->  •
  1932.   ->  •
  1933.  
  1934.   SGML-tag->condition-expression
  1935.   ~->script
  1936.   ~->  •
  1937.   ~->  •
  1938.   ->replacing-string
  1939.   ->  •
  1940.   ->  •
  1941.   ->  •
  1942.  
  1943. (2) Lines can be arbitrarily long.
  1944.  
  1945. (3) The SGML-tag must be unique in map-info as a whole. The value of condition-expression must be unique in the combination if you specify two and more SGML-tags.
  1946.  
  1947. 6.1 comment
  1948.  
  1949. (1) Format
  1950.  
  1951.   !comment
  1952.  
  1953. (2) Function
  1954.  
  1955. (2.1) This line is a comment.
  1956.  
  1957. (2.2) You can write the comment in anywhere.
  1958.  
  1959. (3) Example
  1960.  
  1961.   ! This is a comment line.
  1962.  
  1963. 6.2 SGML-tag and Condition-expression
  1964.  
  1965. (1) Format
  1966.  
  1967.   (gid->condition-expression
  1968.   )gid->condition-expression
  1969.   C->condition-expression
  1970.  
  1971. (2) Function
  1972.  
  1973. (2.1) The left part of this line is a SGML-tag that requests the replacing.
  1974. --------------------------------------------------------------------
  1975.   Format    SGML-tag
  1976. --------------------------------------------------------------------
  1977.   (gid    the start-tag of generic-identifier `gid'
  1978.   )gid    the end-tag of generic-identifier `gid'
  1979.   C       indicates that the document was a conforming SGML document
  1980. --------------------------------------------------------------------
  1981.  
  1982. (2.2) The right part of this line is a condition-expression. The condition-expression must be the Perl condition-expression. The replacing-process is caused if the return value of condition-expression is true. The replacing-process is always caused if the condition-expression is not specified.
  1983.  
  1984. (3) Example
  1985.  
  1986.   (LI->$xlist
  1987.  
  1988.  The replacing-process is caused when the value of variable `$xlist' is 1.
  1989.  
  1990. 6.3 Replacing-String
  1991.  
  1992. (1) Format
  1993.  
  1994.   ->Replacing-String
  1995.  
  1996. (2) Function
  1997.  
  1998. (2.1) The right part of this line is a replacing-string for the SGML-tag.
  1999.  
  2000. (2.2) The replacing-string consists of one or more lines.
  2001.  
  2002. (2.3) The replacing-string is evaluated by the following rule, and is outputted.
  2003.  
  2004. (2.3.1) The `\n' in the replacing-string converts to a record-end-character.
  2005.  
  2006. (2.3.2) The `~aname~' in the replacing-string converts to the value corresponding to the attribute name `aname' in the current generic-identifier. The build-in function &Value() can refer to this value.
  2007.  
  2008. (2.3.3) The `~#gid_aname~' in the replacing-string converts to an unique number that is assigned to the value of attribute name `ID' and `REFID' in the generic-identifier `gid'. The build-in function &Refer() can refer to this value.
  2009.  
  2010. (2.3.4) The `~$vname~' in the replacing-string converts to the Perl value corresponding to the variable name `$vname'.
  2011.  
  2012. (3) Example
  2013.  
  2014. (3.1) Value of attribute `ID' and its Numbering
  2015.  
  2016.  Assume the following ESIS-data was input and the value `HYPERCARD' of attribute `ID' of generic-identifier `FN' was assigned to 123.
  2017.  
  2018.   AID TOKEN HYPERCARD
  2019.   ATYPE TOKEN AUTHNOTE
  2020.   (FN
  2021.   -HyperCard is a trade mark of Apple Computer, Inc.
  2022.  
  2023.  When `(FN' is input the following map-info acts.
  2024.  
  2025.   (FN
  2026.   ->~ID~=~#FN_ID~
  2027.  
  2028.  The following string is output.
  2029.  
  2030.   HYPERCARD=123
  2031.  
  2032. (3.2) Refer to ID
  2033.  
  2034.  Assume the following ESIS-data was input and the value `HYPERCARD' of attribute `ID' of generic-identifier `FN' was assigned to 123.
  2035.  
  2036.   -DicSGML is the dictionary, is HyperCard 
  2037.   AREFID TOKEN HYPERCARD
  2038.   APAGE TOKEN NO
  2039.   (FNREF
  2040.   )FNREF
  2041.   -Stackware 
  2042.  
  2043.  When `(FNREF' is input the following map-info acts.
  2044.  
  2045.   (FNREF
  2046.   ->~REFID~=~#FN_REFID~
  2047.  
  2048.  The following string is output.
  2049.  
  2050.   HYPERCARD=123
  2051.  
  2052.  Notice that the example of replacing-string is not `~#FNREF_REFID~'. The generic-identifier that decided ID is `FN', not `FNREF'.
  2053.  
  2054. (3.3) Implied Value
  2055.  
  2056.  Assume the following ESIS-data was input.
  2057.  
  2058.   ANUMBER CDATA 
  2059.   AID IMPLIED
  2060.   ASTITLE IMPLIED
  2061.   (H1
  2062.   (H1T
  2063.   -MacSgmls
  2064.  
  2065.  When `(H1' is input the following map-info acts.
  2066.  
  2067.   (H1
  2068.   ->~ID~=~#H1_ID~
  2069.  
  2070.  The following string is output. Both ~ID~ and ~#H1_ID~ are empty character.
  2071.  
  2072.   =
  2073.  
  2074. 6.4 Script
  2075.  
  2076. (1) Format
  2077.  
  2078.   ~->script
  2079.  
  2080. (2) Function
  2081.  
  2082. (2.1) The right part of this line is a Perl-script that should perform before the replacing-process.
  2083.  
  2084. (2.2) Do not use the control structure which consists of separated lines because SgmlForm performs a line to each phases.
  2085.  
  2086. (2.3) The initial of variable name in your script should be `$x'. Such variables can avoid the same word in SgmlForm variables.
  2087.  
  2088. (2.4) The following build-in functions are available.
  2089.  
  2090. 7 Available Built-in Functions
  2091.  
  2092. 7.1 Attribute Value, ID number
  2093.  
  2094. (1) Format
  2095.  
  2096.   &Value(aname)         get a value of attribute name `aname' of current generic-identifier
  2097.   &Refer(gid, aname)    get an unique number of identifier
  2098.  
  2099. (2) Function
  2100.  
  2101. (2.1) &Value() acts the same function as `~aname~'. &Refer() acts the same function as `~#gid_aname~'. Thus the attribute name of &Refer() must be either `ID' or `REFID'. 
  2102.  
  2103. (2.2) The undefined value is returned when no value (IMPLIED) is given the attribute name.
  2104.  
  2105. (2.3) The attribute appears earlier than the start-tag in the source-file , but these build-in functions can use at both the start-tag and the end-tag.
  2106.  
  2107. (2.4) These build-in functions refer to the attribute of start-tag which corresponds to end-tag, when structure of SGML-tags consists of the nest.
  2108.  
  2109. (3) Example
  2110.  
  2111.   (FIG
  2112.   ~->$xfigid = &Value('ID') ;
  2113.  
  2114.  The value of ID-attribute of FIG-tag is assigned into a variable `$xfigid'. When the succeeding tag refers to `$xfigid' the ID becomes the number of the figure uniquely.
  2115.  
  2116. 7.2 Hook Data
  2117.  
  2118. (1) Format
  2119.  
  2120.   &Hook(gid)            command that SgmlForm gets the data which corresponds to last generic-identifier `gid'
  2121.   &Data(gid)            get the data which is got by &Hook()
  2122.  
  2123. (2) Function
  2124.  
  2125. (2.1) The generic-identifier `gid' is the same to &Hook().
  2126.  
  2127. (2.2) Data is deleted if you refer to it once.
  2128.  
  2129. (3) Example
  2130.  
  2131.   (TLINE
  2132.   ~->&Hook('TLINE') ;
  2133.     •
  2134.     •
  2135.   
  2136.   (other
  2137.   ~->$xtline = &Data('TLINE') ;
  2138.  
  2139.  In TLINE-start-tag, &Hook() commands that SgmlForm gets data which corresponds to last TLINE-tag. Its value is saved when SgmlForm reads TLINE-tag. In the other tag, &Data() assigns its value into the variable `$xtline'. Its value is deleted after assignment.
  2140.  
  2141. 7.3 Inhibit Data Output
  2142.  
  2143. (1) Format
  2144.  
  2145.   &Inhibit(gid)
  2146.  
  2147. (2) Function
  2148.  
  2149. (2.1) &Inhibit() commands the suppression of data which corresponds to next generic-identifier `gid'.
  2150.  
  2151. (2.2) &Inhibit() returns no value.
  2152.  
  2153. 7.4 Convert Replacing-string
  2154.  
  2155. (1) Format
  2156.  
  2157.   &Convert(chstr)
  2158.  
  2159. (2) Function
  2160.  
  2161. (2.1) &Convert() returns the replacing-string `chstr' which is evaluated.
  2162.  
  2163. 7.5 Character Conversion
  2164.  
  2165. (1) Format
  2166.  
  2167.   &DefineReplace(str1, str2)   define a string `str1' as a string `str2'
  2168.   &DefineEscape(schr, esc)     define a special character `schr' as an escape string `esc'
  2169.   &Replace(sw)                 replace if sw is 1, or else do nothing
  2170.   &Escape(sw)                  escape if sw is 1, or else do nothing
  2171.   &DeleteCr(sw)                suppress CR(\n) if sw is 1, or else output
  2172.  
  2173. (2) Function
  2174.  
  2175. (2.1) These build-in functions command SgmlForm to replace the string in data by another string.
  2176.  
  2177. (2.2) The process during data output performs as follows ; the conversion of octal notation, the deletion of CR(`\n') denoted by &DeleteCr(), the replacing by &DefineEscape() and &Escape(), the replacing denoted by &DefineReplace() and &Replace().
  2178.  
  2179. (3) Example
  2180.  
  2181.   ~Å®&DeleteCr(1) ;
  2182.   ~Å®&DefineEscape('<','<') ;
  2183.   ~Å®&DefineEscape('>','>') ;
  2184.   ~Å®&DefineEscape('&','&') ;
  2185.   ~Å®&Escape(1) ;
  2186.  
  2187. 7.6 Graphic Size
  2188.  
  2189. (1) Format
  2190.  
  2191.   &GraphicSize(fname, ftype)
  2192.  
  2193. (2) Function
  2194.  
  2195. (2.1) &GraphicSize() returns the size (width and height) of picture which is expressed by filename `fname' and file type `ftype'. These values are an array variable.
  2196.  
  2197. (2.2) The file type is as follows ;
  2198.  
  2199. -------------------------------------------
  2200.   ftype        file type
  2201. -------------------------------------------
  2202.   ps          EPS file expressed by ASCII
  2203.   pict        PICT file
  2204. -------------------------------------------
  2205.  
  2206. (3) Example
  2207.  
  2208.   ~->$xfname = &Convert('~$xpath~~FILE~.~$xgraphic~') ;
  2209.   ~->($xwidth, $xheight)  = &GraphicSize('~$xpath~~FILE~~$xgraphic~', $xgraphic) ;
  2210.  
  2211.  The width of picture is assigned into `$xwidth'. The height of picture is assigned into `$xheight'. The file name is denoted by `~$xpath~~FILE~.~$xgraphic~'. When $xpath is 'MyDisk:GraphicData:', the value of FILE-attribute is 'DailogSample' and the variable `$xgraphic' is 'pict', the EPS file name is 'MyDisk:GraphicData:DailogSample.pict'.
  2212.  
  2213.  
  2214. 7.7 Structure Control
  2215.  
  2216. (1) Format
  2217.  
  2218.   &Begin(sname)          command the beginning of the structure
  2219.   &End(sname)            command the end of the structure
  2220.   &Level(sname)          get a nested number in the structure
  2221.   &Nest(sname)           get a consecutive number in the structure
  2222.   &Number(sname)         get a consecutive number in the structure
  2223.   &Count(sname)          count the number of the structure
  2224.  
  2225. (2) Function
  2226.  
  2227. (2.1) These build-in functions control the structure. The structures are identified by the structure name.
  2228.  
  2229. (2.2) The structures are text such as the listing or chapter and section, are specified by start-tag and end-tag and may be the nest.
  2230.  
  2231. (2.3) The level of structures in nest is expressed by a consecutive number. Most shallow level is 1. More deeper level is increased in 1 each.
  2232.  
  2233. (2.4) The formats of structure number are as follows ;
  2234.  
  2235. (2.4.1) The structure number in the nest expression begins such as `1', `1.1', `1.1.1',... and increases such as `2', `1.2', `1.1.2',....
  2236.  
  2237. (2.4.2) The structure number in the terminal expression is most right number of the nest expression.
  2238.  
  2239. (3) Example
  2240.  
  2241.  The following script performs the numbering and indentation in listing. The structure name `LI' acts to identify the listing. If the level of nest is 1 the number is such as `(1)', `(2)', `(3)', .... If the level of nest is two or more, the number is such as `(1.1)', `(1.2)', `(1.3)', ..., `(2.1)', `(2.2)', ... Each line indents another when the level is down.
  2242.  
  2243.   (LI
  2244.   ~->&Begin('LI') ;
  2245.   (IT
  2246.   ~->&Count('LI') ;
  2247.   ~->$xlleft = ' ' x &Level('LI') ;
  2248.   ~->$xlnest = &Nest('LI') ;
  2249.   ->\n~$xlleft~(~$xlnest~) 
  2250.   )LI
  2251.   ~->&End('LI') ;
  2252.   ~->$xlleft = ' ' x &Level('LI') ;
  2253.  
  2254. 7.8 Display the String
  2255.  
  2256. (1) Format
  2257.  
  2258.   &Display(str)
  2259.  
  2260. (2) Function
  2261.  
  2262. (2.1) &Display() display the string `str'. The dispaly is controlled by the lines and columns that are set by the command `l' and `c'.
  2263.  
  2264. (2.2) This build-in function uses for the debug mainly.
  2265.  
  2266. 8 Convert to HTML-format from the text-format
  2267.  
  2268. (1) The text in left side of the following can convert to HTML in right side.
  2269.  
  2270.                                    <HTML>
  2271.                                    <HEAD>
  2272.   # BUG ENCYCLOPEDIA               <TITLE>BUG ENCYCLOPEDIA </TITLE>
  2273.                                    </HEAD>
  2274.                                    <BODY>
  2275.   1 Who is Bug ?                   <H1>Who is Bug ?</H1>
  2276.    Bug is not a insect,...         <P>Bug is not a insect,...
  2277.     •
  2278.     •
  2279.   2 Morphological study of Bug     <H1>Morphological study of Bug</H1>
  2280.    Since bug is not visible,...    <P>Since bug is not visible,...
  2281.     •
  2282.   -------------------------        <TABLE BORDER=1>
  2283.     Habit        Bug               <TR><TH>Habit</TH><TH>Bug</TH></TR>
  2284.   --------------------------------
  2285.     host         program           <TR><TD>host</TD><TD>in program</TD></TR>
  2286.     propagation  rare              <TR><TD>propagation</TD><TD>rare</TD></TR>
  2287.     behaviour    similar to virus  <TR><TD>behaviour</TD><TD>similar to virus</TD></TR>
  2288.     •
  2289.   -------------------------------- </TABLE>
  2290.   2.1 Origin of Bug                <H2>Origin of Bug</H2>
  2291.    Bugs were developed in 1940s... <P>Bugs were developed in 1940s...
  2292.     •
  2293.     •
  2294.   2.2 Theory of Bug's Evolution    <H2>Theory of Bug's Evolution</H2>
  2295.    The following theory of evol... <P>The following theory of evol...
  2296.     •
  2297.                                    <OL>
  2298.   (1) Development Period           <LI>Development Period
  2299.   (2) First Differentiation        <LI>First Differentiation
  2300.                                    <OL>
  2301.   (2.1) Bug's Ancestor             <LI>Bug's Ancestor
  2302.   (2.2) Virus's Ancestor           <LI>Virus's Ancestor
  2303.                                    </OL>
  2304.   (3) Differentiation by Selection <LI>Differentiation by Selection
  2305.     •
  2306.                                    </OL>
  2307.     •
  2308.     •
  2309.                                    </BODY>
  2310.                                    </HTML>
  2311.  
  2312. (2) The meaning of format is as follows ; Where, `d' means a number, `b' means a blank, `X•••' means that X may repeat, `[X]' means that X may be optional.
  2313.  
  2314. (2.1) File name and Title
  2315.  
  2316.   # str
  2317.  
  2318.  This description is converted to such as the following.
  2319.  
  2320.   <TITLE>str</TITLE>
  2321.  
  2322. (2.2) Header
  2323.  
  2324.   d[.d[.d]] b••• str
  2325.  
  2326.  This description is converted to such as the following.
  2327.  
  2328.   <Hn>str</Hn>
  2329.  
  2330.  Where, `n' is the number of `d'(i.e. deep of level).
  2331.  
  2332. (2.3) Paragraph
  2333.  
  2334.   b str
  2335.  
  2336.  This description is converted to such as the following.
  2337.  
  2338.   <P>str
  2339.  
  2340. (2.4) Preformatted string
  2341.  
  2342.   bb••• str
  2343.  
  2344.  This description is converted to such as the following.
  2345.  
  2346.   <PRE>
  2347.   <LI>str
  2348.     •
  2349.     •
  2350.   </PRE>
  2351.  
  2352. (2.5) Numbered List
  2353.  
  2354.   (d[.d[.d]]) b••• str
  2355.  
  2356.  This description is converted to such as the following. The nest is structured on depending upon the number of `d'(i.e. deep of level).
  2357.  
  2358.   <OL>
  2359.   <LI>str
  2360.     •
  2361.   <OL>
  2362.   <LI>str
  2363.     •
  2364.   </OL>
  2365.   <LI>str
  2366.     •
  2367.   </OL>
  2368.  
  2369. (2.6) Table
  2370.  
  2371. (2.6.1) The table is divided in one header and details by hyphens.
  2372.  
  2373.   ---------------------------
  2374.   bb••• Header
  2375.   ---------------------------
  2376.   bb••• Detail
  2377.     •
  2378.     •
  2379.   ---------------------------
  2380.  
  2381.  This description is converted to such as the following.
  2382.  
  2383.   <TABLE BORDER=1>
  2384.   Converted Header
  2385.   Converted Detail
  2386.     •
  2387.     •
  2388.   </TABLE>
  2389.  
  2390. (2.6.2) Header
  2391.  
  2392.   bb••• str1 [bb••• str2 ]•••
  2393.  
  2394.  The description of Header is converted to such as the following.
  2395.  
  2396.   <TR><TH>str1</TH><TH>str2</TH>•••</TR>
  2397.  
  2398. (2.6.2) Detail
  2399.  
  2400.  The description of Detail is converted to such as the following.
  2401.  
  2402.   <TR><TD>str1</TD><TD>str2</TD>•••</TR>
  2403.  
  2404. (2.7) Graphic data name and Alternation name
  2405.  
  2406.   * b•• str1 [ b•• str2 ]
  2407.  
  2408.  This description is converted to such as the following.
  2409.  
  2410.   <IMG SRC="str1" [ ALT="str2 ]">
  2411.  
  2412. 9 Evironment-variables 
  2413.  
  2414. !!
  2415.  
  2416.